
PostgreSQL Architecture - 2. Physical Structure
https://blog.ex-em.com/1654
Physical Structure
本稿では、Dataファイル、Engine Logファイル、Configurationファイルなど、PostgreSQLが管理する様々なファイルとディレクトリに関する内容を扱うことにします。 これらのファイルおよびディレクトリは、PGDATAというDatabase Clusterのデータディレクトリに格納されています。 PGDATAの一般的な位置は/var/lib/pgsql/13/dataですが、これは PostgreSQL のインストール方法や設定によって変更可能です。
📌 Database 及び Cluster などに関する内容は Logical Structure 内容をご参照ください。
Data Directory 構造(PGDATA)
一般的に、Database Clusterの構成要素は、データディレクトリの配下に配置されています。 Database Cluster初期化(initDB)時、指定された場所にデータディレクトリが作成され、そのディレクトリの下に様々なディレクトリ及びファイルが作成されます。
本稿では便宜上、dataディレクトリを①Data領域、②Log領域、③Configuration領域、④その他の領域に分類します。このうち①~③について詳しく見ていくことにします。
Data領域
Data領域は、実際にユーザデータが保存される空間であり、①Database Cluster関連のDataが保存されるglobalディレクトリと②ユーザデータ(テーブル、インデックスなど)が保存されるbaseディレクトリ、③Tablespace情報が保存されるpg_tblspcディレクトリに区分することができます。
Global Directory
globalディレクトリとは、PostgreSQLの初期インストール時(InitDB)に生成されるDefault Global Tablespaceディレクトリであり、pg_global Tablespaceとも呼ばれます。 この領域には、PostgreSQL Clusterの下位のDatabaseが共有する情報が保存されています。 globalディレクトリには以下のような4種類のファイルがあります。
■ pg_internalinit、 pg_filenode.map
• Database内に存在するObjectの属性情報及び実際の該当Objectの情報、DataファイルとのMapping情報が含まれます。
■ pg_control
• PostgreSQLの運用に必要なメタ情報を格納しているファイルで、OracleのControlファイルに相当します。 pg_controldataユーティリティを通じてファイルの内容を確認することができます。
■ その他の数字ファイル
• Tablespace、Database、Roleのように、複数のDatabaseが共通して使用するDataを持つファイルです。 以下の表は、代表的なOID(Object ID)とテーブル名をMappingした内容です。
Filename/OID |
テーブル名 (Table Name) |
説明 (Description) |
---|---|---|
1213 |
pg_tablespace |
使用可能なTablespace情報 |
1260 |
pg_authid |
データベース認証識別子(ユーザー、グループ、ロール)情報 |
1261 |
pg_auth_members |
ロール間のメンバー関係情報 |
1262 |
pg_database |
使用可能なデータベース情報 |
6000 |
pg_replication_origin |
すべてのレプリケーションの元情報 |
baseディレクトリもPostgreSQLの初期インストール時(initDB)に生成されるDefault Tablespaceディレクトリの一つで、pg_default Tablespaceとも呼ばれます。 ここにはDatabase内にあるテーブル、インデックス、関数のようなObjectが実際に保存される領域であり、保存パスは以下のような構成になっています:
つまり、baseディレクトリの下位にはDatabase OIDを名前で持つディレクトリが存在し、それぞれのDatabaseディレクトリに実際のObject関連ファイルが位置します。
📌 oid2name Utilityは、pg_class テーブルとpg_relation_filepath関数を通じて、データベース名、テーブル名の確認することができます。
pg_tblspc Directory
PostgreSQLのTablespace情報を保存する領域です。 データディレクトリではなく、他の特定のディレクトリを指定してTablespaceを生成すると、そのディレクトリのパスがpg_tblspcディレクトリに生成されたシンボリックリンクを介して接続されます。
ログ領域
pg_wal Directory
- OracleのRedo Logのような役割を果たすWALファイルを保存する領域です。
- 一般的に、Database異常終了時に復旧用途として使用されます。またReplication機能を使用する時にも使用されます。
- PostgreSQL 9.6バージョンまではディレクトリ名がpg_xlogでしたが、PostgreSQL 10バージョンからpg_walに変更されました。
📌postgresql.confの"WRITE-AHEAD LOG"部分パラメータを修正して使用します。
Log Directory
- Oracleのアラートログと類似しており、Databaseの運用中に発生する特異事項を記録するスペースです。
- PostgreSQL 9.6バージョンまではディレクトリ名がpg_logでした、PostgreSQL 10バージョンからlogに変更されました。
📌postgresql.confの"REPORTING AND LOGGING"部分パラメータを修正して使用します。
Configuration 領域
PG_VERSION
PostgreSQL Databaseのバージョン情報(Major Number)を表示します。 ファイルの中に記述された内容とPostgreSQLエンジンバージョンが一致しない場合、PostgreSQLは起動できません。 以下の2つのケースでは、PostgreSQLが起動されません。
• PG_VERSION ファイルが存在しない場合
• PostgreSQL Databaseのバージョンとファイルに記述されたバージョンが異なる場合
pg_hba.conf
PostgreSQLの認証システム関連情報が含まれているファイルです。 PostgreSQLにアクセスするHostやHostのData伝送方式、暗号化伝送方式に対する設定ができます。 pg_hba.conf 内容を変更した後は、PostgreSQLを再起動する必要があります。
📌pg_hbaのHBAはHost-Based Authenticationの略でホスト基盤認証を指します。 より詳しい説明はpg_hba.conf ページを参考にしてください。
postgresql.conf
- PostgreSQL Databaseの環境設定ファイルです。 Oracleのpfileに相当します。
- PostgreSQL 12バージョンからrecovery.confファイルが該当ファイルに統合されました。 (既存のバージョンでは必要に応じてrecovery.conf構成が必要)
📌パラメータ別の詳細については、postgresql.confページを参照してください。
postgresql.auto.conf
- postgresql.auto.confはユーザーが直接修正するものではなく、
alter system
コマンドを通じて変更した内容が保存されるファイルです。 - 変更された情報は、pg_reload_conf()関数または
pg_ctl reload
コマンドにより適用できます。 ただし、パラメータによってはDBの再起動を必要とする場合があります。 -
alter system reset
またはalter system reset all
コマンドを使用すると、変更された内容を初期化することができ、既存の設定内容は削除されます。
postmaster.pid
• postmasterプロセスのPID、Data Path、開始時間、およびPort情報を格納します。このファイルはPostgreSQL起動中にのみ存在します。