システムカタログという用語が分からなかったので調べていたところ、スキーマ(Schemas)という概念が出てきた。
スキーマを理解するための前提知識として他の用語についても調べたのでまとめておくことにする。
「データベースクラスタ」は PostgreSQL 独自の用語で、1 つのサーバインスタンスによって管理されるデータベースの集合体を意味します。「クラスタ」という言葉からは、複製して冗長化されたシステムをイメージする人も多いかと思いますが、そのような意味ではないので注意してください。
PostgreSQL がインストールされているサーバーのことで、データベースの集合を指す。 PostgreSQL 独自用語。
データベースクラスタは、ユーティリティ、ユーザー、サードパーティ製のアプリケーションから使用される postgres というデータベースをデフォルトで含んだ形で作成される。 postgres データベースがなくてもサーバーとしては動作するが、多くの外部モジュールはそれらを前提にしているため、必要になることが多い。
上述したデータベースクラスタに複数作成できる。
デフォルトだと、template1という標準のシステムデータベースから複製して作成される。
参考: https://www.postgresql.org/docs/current/sql-createdatabase.html
データベースクラスタに関する各種情報は、スキーマによって管理される。データベースは、1 つ以上の名前つきスキーマを持つ。
などの理由で、スキーマの機能が実装されている。
OS のディレクトリに例えるとわかりやすく、スキーマは名前空間の役割を果たす。スキーマを使うことでオブジェクト名の衝突を防ぎ、論理的に分離して管理できる。
SQL の標準規格で規定されている情報スキーマ。 情報スキーマは、information_schema という名前のスキーマで、データベース内のテーブルや列、ユーザなどの情報が格納されている。RDB 固有の情報を含まないため、より詳細な情報を参照する場合はシステムカタログを確認する必要がある。
参考: https://oss-db.jp/sample/silver_management_07/139_230927
pg_catalogという名前で定義されたスキーマ。システムに格納されているテーブルは基本的に先頭にpg_という prefix がつく。
pg_catalogには、スキーマのメタ情報が格納されている。
pg_catalog スキーマには
の 2 種類のテーブルが存在する。
データベース毎に作成されるカタログテーブル
select * from pg_catalog.pg_language;
グローバルに共有されるカタログテーブル
select * from pg_catalog.pg_database;
データベースに作成されるデフォルトのスキーマ。
CREATE TABLEでスキーマ名を省略すると自動的に public スキーマにテーブルが作成される。
テーブルの参照時に毎回スキーマを明示するのは手間がかかるので、省略することが可能。 その場合は検索パスというスキーマのリストから最初に一致するテーブルを検索してくれる。
参考: https://www.postgresql.jp/document/16/html/ddl-schemas.html
