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