はじめに
OSS-DB silverの勉強をしていて、知識だけでは理解がなかなか進まないという印象を受けたので、Dockerで立ち上げたPostgresを操作しながら理解を深めようと思います。
こちらでは、操作した結果を合わせて書いていきます。
使用環境
・Docker
・postgres:11-alpin
https://hub.docker.com/_/postgres
データベースクラスタとは何か
PostgreSQLにおけるデータベースの格納領域の事を指します。
データベースベースクラスタの場所とディレクトリ構成を確認しよう
データベースクラスタは、PostgreSQLにおけるデータベースの格納領域で、実体はファイルシステム上のディレクトリです。パスはPGDATAで表記されます。
実際にdockerコンテナ内で確認します。
#postgresはコンテナ名 ユーザーはpostgresでログイン
% docker exec -it --user=postgres postgres bin/bash
#データベースクラスタの場所を確認(PGDATA=の中身)
$ set
~
PGDATA=/var/lib/postgresql/data
~
#データベースクラスタの場所に移動
$ cd /var/lib/postgresql/data
#data内をtreeで確認
$ tree -L 1
.
├── PG_VERSION
├── base #データベースごとのサブディレクトリを保有するサブディレクトリ
├── global #pg_databaseのようなクラスタで共有するテーブルを保有するサブディレクトリ
├── pg_commit_ts #トランザクションのコミット時刻のデータを保有するサブディレクトリ
├── pg_dynshmem #動的共有メモリサブシステムで使われるファイルを保有するサブディレクトリ
├── pg_hba.conf #PostgreSQL に接続するクライアントの認証に関する設定を記述するファイル
├── pg_ident.conf #Ident認証のユーザー名をPostgreSQLのロール名にマッピングするためのファイル
├── pg_logical #論理デコードのための状態データを保有するサブディレクトリ
├── pg_multixact #マルチトランザクション状態のデータを保有するサブディレクトリ(共有行ロックで使用される)
├── pg_notify #LISTEN/NOTIFY状態データを保有するサブディレクトリ
├── pg_replslot #レプリケーションスロットデータを保有するサブディレクトリ
├── pg_serial #コミットされたシリアライザブルトランザクションに関する情報を保有するサブディレクトリ
├── pg_snapshots #エキスポートされたスナップショットを保有するサブディレクトリ
├── pg_stat #統計サブシステム用の永続ファイルを保有するサブディレクトリ
├── pg_stat_tmp #統計サブシステム用の一時ファイルを保有するサブディレクトリ
├── pg_subtrans #サブトランザクションの状態のデータを保有するサブディレクトリ
├── pg_tblspc #テーブル空間へのシンボリックリンクを保有するサブディレクトリ
├── pg_twophase #プリペアドトランザクション用の状態ファイルを保有するサブディレクトリ
├── pg_wal #WAL(ログ先行書き込み)ファイルを保有するサブディレクトリ
├── pg_xact #トランザクションのコミット状態のデータを保有するサブディレクトリ
├── postgresql.auto.conf #ALTER SYSTEMにより設定された設定パラメータを格納するのに使われるファイル
├── postgresql.conf #PostgreSQLのパラメータを設定するファイル
├── postmaster.opts #最後にサーバを起動した時のコマンドラインオプションを記録するファイル
└── postmaster.pid #現在のpostmasterプロセスID(PID)、クラスタのデータディレクトリパス、postmaster起動時のタイムスタンプ、ポート番号、共有メモリのセグメントIDを記録するロックファイル
最後にtreeで確認したdata配下がデータベースクラスタのディレクトリ構成となっています。
終わりに
このデータベースクラスタはPostgreSQLサーバーと1対1で対応します。
1つのPostgreSQLサーバーは、1つのデータベースクラスタだけを使って、データベースサービスを提供します。
PostgreSQLの操作によって、このデータベースクラスタ内にどういったデータが保存されるか、また設定ファイルの変更内容がPostgreSQLにどう影響するかは下記記事で書いていきます(途中)
1、ディレクトリ構造を確認
2、PG_VERSION、baseの役割
3、globalの役割
4、pg_commit_tsの役割
5、pg_dynshmemの役割