Kodrill

インストールと標準付属ツール

OSS-DB Silver

initdb とデータベースクラスタ・テンプレートデータベース/pg_ctl・createuser・createdb・psql とメタコマンド・pg_isready・pg_controldata など

問題数
22 問
合格ライン
70%
実行して確認済み
2 問
この分野の要点を読む7 章・約 8 分。実行して確かめたコード例と、試験でよくある引っかけをまとめています

ログインなしで試す

無料の 5 問を、1問ごとに正誤と解説を見ながら解けます。解答は保存されません。

5 問を試す

無料登録して学習を記録する

学習履歴・ダッシュボード・ブックマーク・模試モードが使えます。

★ 残り 17 問はプレミアム会員限定です

無料プランでは先頭 5 問まで解けます。プレミアムなら全問題・苦手問題の復習・広告非表示が使えます。
料金プランを見る

問題と解説を見る (無料)

登録しなくても、次の5問は問題文と解説をそのまま読めます。

インストールと標準付属ツールの要点

内容の確認日: 2026-10-29

この分野は出題範囲の S2.1 (インストール方法) と S2.2 (標準付属ツールの使い方) に当たり、50 問中およそ 7 問 (S2.1 が 2 問・S2.2 が 5 問) が出題されます。

コマンドのオプションの文字 (-D・-E・-m など) を問う問題が多いのが特徴です。オプションを丸暗記するより、「何を指定するオプションか」を英語の長い名前 (--pgdata・--encoding・--mode) と結び付けて覚えると忘れにくくなります。

initdb とデータベースクラスタ

initdb は データベースクラスタ (1 つのサーバーが管理するデータベースの集まりと、設定ファイル・WAL などを置くディレクトリ) を作ります。場所は -D (--pgdata) で指定し、省略すると環境変数 PGDATA が使われます。

・-E (--encoding): 新しいデータベースの既定のエンコーディング ・--locale: 既定のロケール (--no-locale は --locale=C と同じ) ・-U (--username): データベースのスーパーユーザーの名前。省略すると、initdb を実行した OS のユーザー名になる ・-W (--pwprompt): スーパーユーザーのパスワードを入力させる ・-k (--data-checksums): データページのチェックサムを有効にする ・-X (--waldir): WAL のディレクトリを別の場所に置く

initdb は OS の root では実行できず、指定するディレクトリは存在しないか空である必要があります。作られたクラスタには、base (データベースごとのファイル)・global (クラスタ全体で共有するカタログ)・pg_wal (WAL)・postgresql.conf・pg_hba.conf などが置かれます。

テンプレートデータベース

initdb は postgres・template0・template1 の 3 つのデータベースを作ります。CREATE DATABASE (createdb) は、指定がなければ template1 を複製して新しいデータベースを作ります。template1 に作ったテーブルや拡張は、その後に作るデータベースに引き継がれます (既存のデータベースは変わりません)。

template0 は初期状態のまま保つためのテンプレートで、接続はできません (datallowconn が偽)。template1 と違うエンコーディングやロケールのデータベースは、template0 から作る必要があります。

SQL
SELECT datname, datistemplate, datallowconn FROM pg_database WHERE datname LIKE 'template%' ORDER BY datname;
ターミナル
psql -A -t -P null=NULL -f example.sql
template0|t|f
template1|t|t
SQL
CREATE DATABASE legacy TEMPLATE template1 ENCODING 'SQL_ASCII';
ターミナル
psql -A -t -P null=NULL -f example.sql

エラー (SQLSTATE 22023)

template1 のエンコーディングが UTF8 なので、違うエンコーディングを指定するとエラーになります (SQLSTATE 22023。メッセージのヒントで template0 を使うよう案内されます)。

pg_ctl でのサーバーの操作

pg_ctl のサブコマンドは init・start・stop・restart・reload・status・promote・logrotate・kill です。start の -l はサーバーのログを書くファイル、-o は postgres に渡すオプションです。

stop (と restart) の停止モードは -m で指定します。

・smart: 新しい接続を受け付けず、既存のクライアントがすべて切断してから停止する ・fast (既定): 実行中のトランザクションをロールバックして接続を切り、正常に停止する ・immediate: 後始末をせずに即座に終了する。次の起動時にクラッシュリカバリ (WAL の再生) が行われる。コミット済みのデータは失われない

reload は設定ファイルを読み直させる (SIGHUP を送る) だけで、接続は切れません。max_connections のような起動時にしか決められない項目は、restart が必要です。promote はスタンバイサーバーをプライマリに昇格させます。

createuser・createdb・dropdb・dropuser

これらはサーバーに接続して CREATE ROLE・CREATE DATABASE などの SQL を実行するラッパーなので、サーバーが起動している必要があります。

・createuser: -s スーパーユーザー、-d データベースを作れる、-r ロールを作れる、-P パスワードを入力させる、-L ログインできない (既定はログインできる) ・createdb: -O 所有者、-T テンプレート、-E エンコーディング。-U は接続に使うロールで、所有者ではない ・dropdb: 接続中のセッションがあると削除できない (13 からは --force で接続を切って削除できる) ・dropuser: 所有するオブジェクトがあるロールは削除できない

psql とメタコマンド

psql の主なオプションは -h (ホスト)・-p (ポート)・-U (ロール)・-d (データベース)・-c (コマンドを 1 つ実行して終了)・-f (ファイルの SQL を実行)・-l (データベースの一覧を表示して終了) です。

\ で始まるメタコマンドは psql 自身が解釈し、セミコロンなしで改行で実行されます。

・一覧: \l データベース、\du ロール、\dn スキーマ、\dt テーブル、\d テーブル名 列の定義 ・操作: \c 接続先の切り替え、\i ファイルの実行、\o 結果をファイルへ、\x 拡張表示、\timing 実行時間の表示、\q 終了

\set は psql の変数を設定し、SQL の中の :変数名 を値に置き換えてからサーバーに送ります。文字列として埋め込むときは :'変数名' と書きます。

SQL
\set x 10\set name aliceSELECT :x * 2, :'name';
ターミナル
psql -A -t -P null=NULL -f example.sql
20|alice

そのほかの付属ツール

・pg_isready: サーバーが接続を受け付けているかを調べる。終了ステータスは 0 受け付けている、1 拒否している (起動中など)、2 応答がない、3 確認しなかった (引数の誤りなど) ・pg_controldata: 制御ファイル (global/pg_control) の内容 (クラスタの状態・最後のチェックポイントの位置など) を表示する。サーバーが停止していても使える ・pg_config: インストールの情報 (プログラムのディレクトリ・ビルド時のオプション・バージョン) を表示する ・pg_resetwal: WAL と制御ファイルの情報を初期化する。WAL の破損で起動できないときの最後の手段で、実行後はデータの整合性が保証されない。サーバーを停止して実行する

試験でよくある引っかけ

  • initdb の -U を省略したとき

    スーパーユーザーの名前は、postgres ではなく initdb を実行した OS のユーザー名になります。

  • template0 に接続できない

    template0 は接続できませんが、CREATE DATABASE ... TEMPLATE template0 の複製元には指定できます。

  • pg_ctl stop の既定のモード

    既定は smart ではなく fast です。smart はクライアントの切断を待ちます。

  • immediate でもデータは失われない

    コミット済みの内容は WAL にあり、次の起動時のリカバリで戻ります。pg_resetwal を使う場面ではありません。

  • createdb の -U と -O

    -U は接続に使うロール、-O は作るデータベースの所有者です。

  • psql -l と \l

    どちらもデータベースの一覧です。ロールの一覧は \du、テーブルの一覧は \dt です。

  • pg_controldata と pg_config

    前者はデータベースクラスタの制御ファイル、後者はインストールの情報を表示します。

問題で確認する

この分野の問題を、解説つきで読めます (登録不要)。

出典・参考

コード例は、PostgreSQL 14 で実際に実行して結果を確認しています。