initdbはPostgreSQLのデータベースクラスタを新しく作成します。 データベースクラスタとは、1つのサーバインスタンスで管理されるデータベースの集合です。
データベースクラスタの作成には、データベースのデータを保存するディレクトリの作成、共有カタログテーブル(特定のデータベースではなく、クラスタ全体に所属するテーブル)の生成、そしてtemplate1データベースとpostgresデータベースの作成といった作業が含まれます。 後から新しいデータベースを作成する際は、template1データベースの全ての内容がコピーされます。 (つまり、template1にインストールしたものすべてが、後に生成した各データベースに自動的にコピーされます。) postgresデータベースは、ユーザ、ユーティリティ、サードパーティ製アプリケーションのデフォルトデータベースとしての使用を意図したものです。
initdbは指定されたデータディレクトリを作成しようと試みますが、多くの場合、そのデータディレクトリの親ディレクトリの所有者はrootなので、権限がないことがあります。 このような場合、まず、空のデータディレクトリをrootで作成し、chownを使ってそのディレクトリの所有権限をデータベースのユーザに変えてください。 次にsuを使ってデータベースユーザとなります。 最後にデータベースユーザとしてinitdbを実行します。
initdbは、サーバプロセスの所有者によって実行されなければなりません。 initdbによって作成されるファイルやディレクトリにサーバがアクセスする必要があるからです。 サーバをrootとして実行することはできませんので、rootでinitdbを実行してはいけません (実際には、実行しようとしても拒否されます)。
initdbは、データベースクラスタのデフォルトのロケールと文字セット符号化方式を初期化します。 文字セット符号化方式、照合順(LC_COLLATE)および文字セットクラス(LC_CTYPE、例えば、大文字、小文字、数字)は、データベース作成時、別々に設定することができます。 initdbはtemplate1データベース用のこれらの値を決定します。 この値が他のすべてのデータベースのデフォルトとして提供されます。
デフォルトの照合順や文字セットクラスを変更するためには、--lc-collateおよび--lc-ctypeオプションを使用してください。 CやPOSIX以外の照合順には性能の劣化が伴います。 これらの理由によりinitdb実行時のロケールを正しく選択することが重要です。
残りのロケール関連のものはサーバ起動時に変更することができます。 --localeを使用して、照合順や文字セットクラスを含む、すべてのロケール関連のもののデフォルトを設定することも可能です。 SHOW ALLを使用して、すべてのサーバのロケール値(lc_*)を表示することができます。 詳細は項22.1に記載しています。
デフォルトの符号化方式を変更するには、--encodingオプションを使用します。 詳細は項22.3に記載しています。
このオプションは、pg_hba.confにてローカルユーザ用に使用される認証方法(host行とlocal行)を指定します。 システムのすべてのローカルユーザが信頼できるわけではない場合は、trustを使用しないでください。 インストールを簡単にするためにtrustがデフォルトです。
このオプションはpg_hba.confにてTCP/IP接続経由のローカルユーザ用に使用される認証方法(host行)を指定します。
このオプションはpg_hba.confにてUnixドメインソケット接続経由のローカルユーザ用に使用される認証方法(local行)を指定します。
このオプションは、データベースクラスタを格納すべきディレクトリを指定します。 initdbが必要とする情報はこれだけですが、PGDATA環境変数を設定しておけば、このオプションで指定する手間が省けます。 この方法は、後に同じ変数を使用してデータベースサーバ(postgres)がデータベースディレクトリを参照できるので、効率的です。
テンプレートデータベースの符号化方式を選択します。 特に上書きされない限り、これが今後作成される全てのデータベースのデフォルト符号化方式となります。 デフォルトは、ロケールによって決まります。 ロケールが機能していない場合は、SQL_ASCIIになります。 PostgreSQLサーバによってサポートされる文字セットについては項22.3.1で説明します。
データベースクラスタ用のデフォルトのロケールを設定します。 このオプションを指定しない場合は、initdbを実行している環境のロケールが継承されます。 ロケールサポートについては項22.1で説明します。
--localeと似ていますが、指定したカテゴリのロケールのみを設定します。
--locale=Cと同じです。
initdbはデータベーススーパーユーザのパスワードをこのファイルから読み取ります。 このファイルの最初の行がパスワードとして解釈されます。
デフォルトの全文検索設定を設定します。 詳細についてはdefault_text_search_configを参照してください。
データベースのスーパーユーザのユーザ名を選択します。 initdbを実行している実効ユーザの名前がデフォルトです。 スーパーユーザの名前はあまり重要ではありませんが、慣習的に使われているpostgresを使うことを(オペレーティングシステムのユーザ名と異なっていても)お勧めします。
initdbにデータベースのスーパーユーザ権限を与えるためのパスワード入力のプロンプトを表示させます。 パスワード認証を行うつもりがない場合は必要ありません。 このオプションを指定しても、パスワードの設定を行わない限りパスワード認証は行われません。
このオプションはトランザクションログの格納ディレクトリを指定します。
この他にも、使用頻度は下がりますが、下記のオプションが使用可能です。
ブートストラップバックエンドからのデバッグ情報と、一般の利用者にはおそらく不要なその他の情報を出力します。 ブートストラップバックエンドとはinitdbがカタログテーブルを作成する際に使用するプログラムです。 このオプションはうんざりするようなログを大量に出力します。
データベースクラスタを初期化する際に、initdbが参照すべき入力ファイルを指定します。 これは通常必要ありません。 明示的に指定する必要がある場合は、その時に指定するよう要求されます。
デフォルトでは、initdbを実行中にエラーが発生し、データベースクラスタを完成できなかった場合に、そのエラーが発生する前に作成された全てのファイルを削除します。 このオプションを指定すると、これらのファイルが削除しないで残されるので、デバッグの際にはとても便利です。
その他のオプションを以下に示します。
initdbのバージョンを表示し、終了します。
initdbのコマンドライン引数の使用方法を表示し、終了します。
データベースクラスタを保存するディレクトリを指定します。 -Dオプションを使用して上書きすることができます。
また、このユーティリティは、他のほとんどのPostgreSQLユーティリティと同様、libpqでサポートされる環境変数を使用します(項31.14を参照してください)。