PostgreSQL サーバアプリケーション(initdb、pg_ctl、pg_controldata)

initdb

https://www.postgresql.jp/document/11/html/app-initdb.html

  • initdb
    • 例)initdb --pgdata=/usr/local/pgsql/data --encoding=UTF8 --locale=C
      • -D、--pgdata データベースクラスタの格納先ディレクト
      • -E、--encoding テンプレートデータベースの符号化方式
      • --locale データベースクラスタロケール
      • --no-locale
      • -U、--username 作成するデータベースのスーパーユーザーの名前
  • pg_ctl initdb

PostgreSQL のデータベースクラスタを作成する。

  1. テンプレートデータベース template0 を作成。
  2. template0 をコピーして、テンプレートデータベース template1 を作成。
  3. template1 をコピーして、データベース postgres を作成。

データベースクラスタは、セキュリティ上の理由から、データベースクラスタを作成したユーザ(initdbを実行したデータベース管理者ユーザ)以外は読み書きができないようになっている。
template0 はテーブルを追加できないが、template1 はできる。
デフォルトでは、template0には誰も接続できない。
デフォルトの文字セットは -E オプションまたは --encoding オプション、デフォルトのロケールは --locale オプションで指定する。
パスワードは --pwfile オプションにより、スーパーユーザのパスワードが記述されたファイルを指定する、または -W オプション、--pwprompt オプションによりスーパーユーザのパスワードを入力させて設定することができる。
データベースクラスタは、格納先のディレクトリとサーバが稼働するポート番号の組み合わせで特定される仕組み。
「-U」または「--username」オプションを指定しない場合は、コマンドを実行したOSユーザ名でスーパーユーザが作成される。
「-E」または「--encoding」オプションでエンコーディングを指定しない場合は、OSのロケールが使用される。
データベースクラスタの作成時にデフォルトでpublicスキーマを作成する。

受験対策

2.07_Silverの例題解説「S2 運用管理 - S2.1 インストール方法」
2.25_Silverの例題解説「S2 運用管理 - S2.1 インストール方法」
https://oss-db.jp/sample/silver_management_03/41_140415
2.55_Silverの例題解説「S2 運用管理 - S2.1 インストール方法(initdbコマンドの使い方)」
2.56_Silverの例題解説「S2 運用管理 - S2.1 インストール方法(テンプレートデータベース)」
2.57_Silverの例題解説「S2 運用管理 - S2.1 インストール方法(データベースクラスタの概念と構造)」
2.71_Silverの例題解説「S2 運用管理 - S2.1 インストール方法(initdbコマンドの使い方)」
2.72_Silverの例題解説「S2 運用管理 - S2.1 インストール方法(データベースクラスタの概念と構造)」
2.73_Silverの例題解説「S2 運用管理 - S2.1 インストール方法(テンプレートデータベース)」
テンプレートデータベースは、データベースカタログpg_databaseのdatistemplateがtrueになっていること。
2.91_Silverの例題解説「S2 運用管理 - S2.1 インストール方法(initdbコマンドの使い方)」
2.92_Silverの例題解説「S2 運用管理 - S2.1 インストール方法(データベースクラスタの概念と構造)」
2.93_Silverの例題解説「S2 運用管理 - S2.1 インストール方法(テンプレートデータベース)」
2.93_Silverの例題解説「S2 運用管理 - S2.1 インストール方法(テンプレートデータベース)」
テンプレートデータベースは、DROP DATABASEで削除できない。
テンプレートデータベースの所有者が誰であっても、CREATEDB権限のあるユーザはそれを複製できる。
2.112_Silverの例題解説「S2 運用管理 - S2.1 インストール方法(initdbコマンドの使い方)」
2.113_Silverの例題解説「S2 運用管理 - S2.1 インストール方法(データベースクラスタの概念と構造)」
レプリケーションなどの手法を使って、データベースクラスタ全体を複製する。

pg_ctl

https://www.postgresql.jp/document/11/html/app-pg-ctl.html

  • データベースの管理者ユーザ(多くの環境ではpostgres)でのみ実行できる。
  • pg_ctl
    • start バックグラウンドで起動する。
    • kill プロセスにシグナルを送信する。
      • TERM(pg_ctl stop -m smartと同じ処理)
      • INT(pg_ctl stop -m fastと同じ処理)
      • QUIT(pg_ctl stop -m immediateと同じ処理)
      • HUP(pg_ctl reloadと同じ処理)
pg_ctl stop
  • pg_ctl stop -m {オプション}
    • smart はすべてのクライアントが切断し、オンラインバックアップがあればそれが終了するのを待ってから、データベースを停止します。
    • fast は、実行中のトランザクションをすべてロールバックし、クライアントの接続を強制的に切断した後でデータベースを停止します。
    • immediate は、クリーンアップ処理なしで、すべてのサーバプロセスを即座に終了させます。この場合、データベースの再起動時にリカバリ処理が実行されます。

PostgreSQLバージョン9.5以降は -m fast がデフォルトになっている。
コマンド実行直後から、新しいクライアントからの接続は禁止される。
オプション-t 待ち時間の指定。デフォルトで 60秒。

pg_ctl reload
  • pg_ctl reload [オプション]

postgresql.conf」、「pg_hba.conf」などの設定ファイルの再読み込みを実行する。

pg_controldata

https://www.postgresql.jp/document/11/html/app-pgcontroldata.html

initdbで初期化されるデータベースクラスタ全体の制御情報を取得するコマンド。