initdb — PostgreSQLのデータベースクラスタを新しく作成する
initdb [option...] [ --pgdata | -D ] directory
initdbはPostgreSQLのデータベースクラスタを新しく作成します。
データベースクラスタとは、1つのサーバインスタンスで管理されるデータベースの集合です。
データベースクラスタの作成には、データベースのデータを保存するディレクトリの作成、共有カタログテーブル(特定のデータベースではなく、クラスタ全体に所属するテーブル)の生成、そしてtemplate1データベースとpostgresデータベースの作成といった作業が含まれます。
後から新しいデータベースを作成する際は、template1データベースの全ての内容がコピーされます。
(つまり、template1にインストールしたものすべてが、後に生成した各データベースに自動的にコピーされます。)
postgresデータベースは、ユーザ、ユーティリティ、サードパーティ製アプリケーションのデフォルトデータベースとしての使用を意図したものです。
initdbは指定されたデータディレクトリを作成しようと試みますが、そのデータディレクトリの親ディレクトリの所有者がrootであるなど、権限がないことがあります。
このような場合、まず、空のデータディレクトリをrootで作成し、chownを使ってそのディレクトリの所有権限をデータベースのユーザに変えてください。
次にsuを使ってデータベースユーザとなり、initdbを実行します。
initdbは、サーバプロセスの所有者となるユーザによって実行されなければなりません。
initdbによって作成されるファイルやディレクトリにサーバがアクセスできる必要があるからです。
サーバをrootとして実行することはできませんので、rootでinitdbを実行してはいけません
(実際には、実行しようとしても拒否されます)。
セキュリティ上の理由から、デフォルトではinitdbにより作られた新しいクラスタはクラスタの所有者だけがアクセスできます。
--allow-group-accessにより、クラスタの所有者と同じグループのユーザがクラスタ内のファイルを読めるようになります。
これは非特権ユーザとしてバックアップを実行するのに有用です。
initdbは、データベースクラスタのデフォルトのロケールと文字セット符号化方式を初期化します。
文字セット符号化方式、照合順(LC_COLLATE)および文字セットクラス(LC_CTYPE、例えば、大文字、小文字、数字)は、データベース作成時、別々に設定することができます。
initdbはtemplate1データベース用のこれらの値を決定します。
この値が他のすべてのデータベースのデフォルトとして提供されます。
デフォルトの照合順や文字セットクラスを変更するためには、--lc-collateおよび--lc-ctypeオプションを使用してください。
CやPOSIX以外の照合順には性能の劣化が伴います。
これらの理由によりinitdb実行時にロケールを正しく選択することが重要です。
残りのロケール関連のものはサーバ起動時に変更することができます。
--localeを使用して、照合順や文字セットクラスを含む、すべてのロケール関連のもののデフォルトを設定することも可能です。
SHOW ALLを使用して、すべてのサーバのロケール値(lc_*)を表示することができます。
詳細は23.1に記載しています。
デフォルトの符号化方式を変更するには、--encodingオプションを使用します。
詳細は23.3に記載しています。
-A authmethod--auth=authmethod
このオプションは、pg_hba.confにてローカルユーザ用に使用されるデフォルトの認証方法(host行とlocal行)を指定します。
initdbは、非レプリケーションおよびレプリケーションの接続について、指定の認証方式を使うエントリをpg_hba.confに作成します。
システムのすべてのローカルユーザが信頼できるわけではない場合は、trustを使用しないでください。
インストールを簡単にするためにtrustがデフォルトになっています。
--auth-host=authmethod
このオプションはpg_hba.confにてTCP/IP接続経由のローカルユーザ用に使用される認証方法(host行)を指定します。
--auth-local=authmethod
このオプションはpg_hba.confにてUnixドメインソケット接続経由のローカルユーザ用に使用される認証方法(local行)を指定します。
-D directory--pgdata=directory
このオプションは、データベースクラスタを格納すべきディレクトリを指定します。
initdbが必要とする情報はこれだけですが、環境変数PGDATAを設定しておけば、このオプションの指定を省略できます。
この方法は、後に同じ変数を使用してデータベースサーバ(postgres)がデータベースディレクトリを参照できるので、便利です。
-E encoding--encoding=encoding
テンプレートデータベースの符号化方式を選択します。
これが今後作成される全てのデータベースについてのデフォルト符号化方式となりますが、作成時に上書きすることもできます。
デフォルトは、ロケールから取得しますが、取得できなければSQL_ASCIIになります。
PostgreSQLサーバによってサポートされる文字セットについては23.3.1で説明します。
-g--allow-group-access
クラスタの所有者と同じグループのユーザが、initdbにより作られたクラスタファイルすべてを読むことを許可します。
WindowsではPOSIX形式のグループパーミッションをサポートしませんので、このオプションは無視されます。
-k--data-checksumsI/Oシステムによる破損検知を補助するために、データページにおいてチェックサムを使用します。 これがないと警告もされません。 チェックサムを有効にすると、認知できる程度の性能低下が発生する可能性があります。 これは初期化の際にのみ設定することができ、後で変更することはできません。 設定した場合、すべてのデータベースにおいて、すべてのオブジェクトに対してチェックサムが計算されます。
--locale=locale
データベースクラスタ用のデフォルトのロケールを設定します。
このオプションを指定しない場合は、initdbを実行している環境のロケールが継承されます。
ロケールサポートについては23.1で説明します。
--lc-collate=locale--lc-ctype=locale--lc-messages=locale--lc-monetary=locale--lc-numeric=locale--lc-time=locale
--localeと似ていますが、指定したカテゴリのロケールのみを設定します。
--no-locale
--locale=Cと同じです。
-N--no-sync
デフォルトではinitdbはすべてのファイルが安全にディスクに書き出されるまで待機します。
このオプションを使うとinitdbは待機せずに返るようになり、より高速になりますが、後でオペレーティングシステムがクラッシュした場合にデータディレクトリが破損状態になってしまう可能性があります。
通常、このオプションは試験用では有用ですが、実用のインストレーションを作成する際に使用すべきではありません。
--pwfile=filename
initdbはデータベーススーパーユーザのパスワードをこのファイルから読み取ります。
このファイルの最初の行がパスワードとして解釈されます。
-S--sync-onlyすべてのデータベースファイルを安全にディスクに書き出し、終了します。 これは通常のinitdbの操作をまったく行いません。
-T config--text-search-config=configデフォルトの全文検索設定を設定します。 詳細についてはdefault_text_search_configを参照してください。
-U username--username=username
データベースのスーパーユーザのユーザ名を選択します。
initdbを実行している実効ユーザの名前がデフォルトです。
スーパーユーザの名前はあまり重要ではありませんが、慣習的に使われているpostgresを(オペレーティングシステムのユーザ名と異なっていても)使っても良いでしょう。
-W--pwprompt
initdbにデータベースのスーパーユーザ権限を与えるためのパスワード入力のプロンプトを表示させます。
パスワード認証を行うつもりがない場合は必要ありません。
このオプションを指定しても、パスワードの設定を行わない限りパスワード認証は行われません。
-X directory--waldir=directoryこのオプションは先行書き込みログの格納ディレクトリを指定します。
--wal-segsize=sizeWALセグメントサイズをメガバイト単位で設定します。 これはWALログの個々のファイルの大きさです。 デフォルトの大きさは16メガバイトです。 値は1から1024の間の2の冪でなければなりません。 このオプションは初期化の際にのみ設定することができ、後で変更することはできません。
WALログのシッピングやアーカイブの粒度を制御するために、この大きさを調整することは有用でしょう。 また、大量のWALのあるデータベースでは、ディレクトリ当たりのWALファイルの数だけでパフォーマンスや管理の問題となり得ます。 WALファイルの大きさを増やせば、WALファイルの数は減るでしょう。
この他にも、使用頻度は下がりますが、下記のオプションが使用可能です。
-d--debug
ブートストラップバックエンドからのデバッグ情報と、一般の利用者にはおそらく不要なその他の情報を出力します。
ブートストラップバックエンドとはinitdbがカタログテーブルを作成する際に使用するプログラムです。
このオプションはうんざりするようなログを大量に出力します。
-L directory
データベースクラスタを初期化する際に、initdbが参照すべき入力ファイルを指定します。
これは通常必要ありません。
明示的に指定する必要がある場合は、その時に指定するよう要求されます。
-n--no-clean
デフォルトでは、initdbを実行中にエラーが発生し、データベースクラスタを完成できなかった場合に、そのエラーが発生する前に作成された全てのファイルを削除します。
このオプションを指定すると、これらのファイルが削除しないで残されるので、デバッグの際にはとても便利です。
その他のオプションを以下に示します。
-V--versioninitdbのバージョンを表示し、終了します。
-?--helpinitdbのコマンドライン引数の使用方法を表示し、終了します。
PGDATA
データベースクラスタを保存するディレクトリを指定します。
-Dオプションを使用して上書きすることができます。
TZ作成されるデータベースクラスタのデフォルトの時間帯を指定します。 値は完全な時間帯の名前で指定することが望ましいです(8.5.3参照)。
また、このユーティリティは、他のほとんどのPostgreSQLユーティリティと同様、libpqでサポートされる環境変数を使用します(34.14を参照してください)。
initdbはpg_ctl initdb経由でも呼び出すことができます。