initdbは新しいPostgreSQLデータベースクラスタを作成します。 データベースクラスタとは、1つのサーバインスタンスで管理されるデータベースの集合です。
データベースクラスタの作成に含まれる作業は、データベースのデータを保存するディレクトリの作成、共有カタログテーブル(特定のデータベースではなく、クラスタ全体に所属するテーブル)の生成、そしてtemplate1データベースの作成です。 後に新しいデータベースを作成する際には、template1データベースの全ての内容がコピーされます。 これには組み込みのデータ型など様々なものを含むカタログテーブルが含まれています。
initdbは、データベースクラスタのデフォルトのロケールと文字セット符号化方式を初期化します。 ロケールカテゴリの一部は、クラスタの存続期間を通して固定されています。 また、CやPOSIX以外のロケールを使用する場合性能上の影響もあります。 ですので、initdbを実行する際には正しい選択をするよう注意が必要です。 その他のロケールカテゴリは、サーバの開始後変更することができます。 initdbはこれらのロケール設定をpostgresql.conf設定ファイルに書き込んでデフォルトとしますが、設定ファイルを編集すればデフォルトを変更することができます。 initdbが使用するロケールを設定するには、--localeオプションの説明を参照してください。 文字セット符号化方式は、各データベースの作成時に個別に設定することができます。 initdbは、template1データベースの符号化方式を決定し、これが今後他の全てのデータベースのデフォルトとして使用されます。 デフォルトの符号化方式を変更するには、--encodingオプションを使用します。
initdbは、サーバプロセスの所有者によって実行されなければなりません。 initdbによって作成されるファイルやディレクトリにサーバがアクセスする必要があるからです。 サーバを rootとして実行することはできませんので、rootでinitdbを実行してはいけません。 (実際、これを行なおうとしても拒否されます。)
initdbは指定されたデータディレクトリを作成しようと試みますが、多くの場合、指定されたデータディレクトリの親ディレクトリの所有者はrootなので、その権限がありません。 このような場合、空のデータディレクトリをrootで作成し、chownを使ってそのディレクトリの所有権限をデータベースのユーザに変えてください。 次にsuを使ってデータベースユーザとなってください。 最後にデータベースユーザとしてinitdbを実行します。
このオプションは、pg_hba.confにてローカルユーザ用に使用される認証方法を指定します。 システムの全てのローカルユーザを信頼できない場合はtrustを使用しないでください。 インストールを簡単にするためにtrustがデフォルトです。
このオプションは、データベースクラスタがどのディレクトリに格納されるべきかの指定を行います。 initdbが必要とする情報はこれだけですが、PGDATA環境変数を設定することによって、このオプションで指定する手間が省けます。 この方法は、後に同じ変数を使用してデータベースサーバ(postmaster)がデータベースディレクトリを参照できるので、効率的です。
テンプレートデータベースの符号化方式を選択します。 特別に上書きされない限り、これが今後作成される全てのデータベースのデフォルト符号化方式となります。 デフォルトは、ロケールによって決まります。 もしロケールが機能していない場合はSQL_ASCIIです。 PostgreSQLサーバによってサポートされる文字セットについては項20.2.1で説明します。
データベースクラスタ用のデフォルトのロケールを設定します。 このオプションを指定しない場合は、initdbが実行されている環境のロケールが継承されます。 ロケールサポートについては項20.1で説明します。
--localeと似ていますが、指定したカテゴリのロケールのみを設定します。
データベースのスーパーユーザのユーザ名を選択します。 initdbを実行している実効ユーザの名前がデフォルトです。 スーパーユーザの名前はあまり重要ではありませんが、慣習的に使われているpostgresを使うことを(オペレーティングシステムのユーザ名が異なる場合でも)お勧めします。
initdbにデータベースのスーパーユーザ権限を与えるためのパスワード入力のプロンプトを表示させます。 パスワード認証を行うつもりがない場合は必要ありません。 そうでなくても、パスワードの設定を行わない限りパスワード認証は行われません。
initdbはデータベーススーパーユーザのパスワードをこのファイルから読み取ります。 このファイルの最初の行がパスワードとして解釈されます。
この他にも、使用頻度は下がりますが、下記の引数が使用可能です。
ブートストラップバックエンドからのデバッグ情報を表示し、その他にも一般の利用者にはとりたてて興味のない情報を出力します。 ブートストラップバックエンドとはinitdbがカタログテーブルを作成する際に使用するプログラムです。 このオプションはうんざりするようなログを大量に出力します。
データベースクラスタを初期化する際にどの入力ファイルをinitdbが参照すべきかを指定します。 これは通常必要ありません。 明示的に指定する必要がある場合は、その時に指定するよう要求されます。
デフォルトでは、initdbを実行中にエラーが発生し、データベースクラスタを完成できなかった場合に、そのエラーが発生する前に作成された全てのファイルを削除します。 このオプションは整頓作業を制御するので、デバッグの際にはとても便利です。