initdb --pgdata | -D dbdir [--sysid | -i sysid] [--pwprompt | -W] [--encoding | -E encoding] [-L directory] [--noclean | -n] [--debug | -d]
initdbは、新しいPostgres データベースクラスタ、またはシステムを作成します。データベースクラスタとは データベースの集合で、1つのpostmasterで管理されています。
データベースシステムの作成は、データベースのデータを保存するディレクトリの作成、 共有カタログテーブルの生成(特定のデータベースではなく、クラスタ全体に所属するテーブル)、 template1データベースの作成から成ります。 新しいデータベースを作成する際、template1データベースの 内容すべてがコピーされます。そこには組み込み型といったものの全てを含む カタログテーブルが含まれています。
initdbをrootで行ってはいけません。 必ずデータベースサーバを稼働させるUNIXユーザで行って下さい。 これは、データベースサーバをルートで稼働させることができないという理由と、 initdbによって作成されたファイルに接続できる 必要があるためです。また、初期化を行っている際は、ユーザ管理やアクセス管理が 動いていないため、Postgresは 現在のUNIXユーザ名とのみ接続します。したがって、サーバプロセスを 所有するユーザでログインして下さい。
initdbは指定されたデータディレクトリを 作成しようと試みますが、多くの場合、指定されたデータディレクトリの親は rootなので、その権限がありません。このような場合、 空のデータディレクトリをrootで作成し、chown を使ってそのディレクトリの所有権限をデータベースのユーザに変えて下さい。 それからsuでデータベースユーザに変わってから データベースユーザとしてinitdbを行って下さい。
このオプションは、データベースがファイルシステムのどの場所に格納されるべきかの 指定を行います。initdbに必要な情報は これだけですが、環境変数PGDATAを設定することによって このオプションで指定する手間が省けます。この方法は、後に同じ変数を 使用してデータベースサーバ(postmaster)が データベースディレクトリを参照できるので、効率的です。
データベースのスーパーユーザのシステムIDを選択します。 initdbを実行しているユーザの実効ユーザIDを デフォルトとします。スーパーユーザのsysidはさほど重要ではありませんが sysidの最初の番号を1のような番号からはじめることもできます。
データベースのスーパーユーザ権限を与えるためにパスワードの プロンプトを作成します。パスワード認証を行うつもりがない場合は 必要ありません。さもなければ、パスワードの設定を行わない限り パスワード認証が行われません。
templateデータベースにマルチバイトエンコーディングを選択します。 これを上書しない限り、その後に作成されたデータベースのデフォルトエンコーディングと なります。マルチバイトエンコードの機能を使用する場合はビルドの際に 必ずこのオプションのデフォルトと一緒に指定する必要があります。
この他にも、使用頻度は下がりますが、下記の引数が使用可能です。
データベースを初期化する際にどの入力ファイルをinitdbが 参照すべきかを指定します。これは通常必要ありません。明示的に指定する必要が ある場合は、その時に指定するよう要求されます。
デフォルトでは、initdbを実行中にエラーが発生し、 データベースを完成させられなかった場合に、そのエラーが発生する前に 作成されたすべてのファイルを削除します。このオプションは整頓作業を 制御するので、デバッグの際にはとても便利です。
ブートストラップバックエンドからデバッグ情報を表示させ、 その他にも一般の利用者にはあまり興味のないような情報を出力させます。 ブートストラップバックエンドとは initdbがカタログテーブルを作成する際に使用するものです。 このオプションはたいくつな内容のログを大量に出力します。