initdb — PostgreSQLのデータベースクラスタを新しく作成する
initdb [option...] [ --pgdata | -D ] directory
initdbはPostgreSQLのデータベースクラスタを新しく作成します。
データベースクラスタの作成には、クラスタのデータを保存するディレクトリの作成、共有カタログテーブル(特定のデータベースではなく、クラスタ全体に所属するテーブル)の生成、そしてpostgresデータベース、template1データベース、template0データベースの作成といった作業が含まれます。
postgresデータベースは、ユーザ、ユーティリティ、サードパーティ製アプリケーションのデフォルトデータベースとしての使用を意図したものです。
template1とtemplate0は、後のCREATE DATABASEコマンドでコピーされる元のデータベースを意図しています。
新しいデータベースを作成する際は、template1データベースの全ての内容がコピーされます。
template0を修正してはいけませんが、template1にはオブジェクトを追加でき、そのオブジェクトは後に生成した各データベースにデフォルトでコピーされます。
より詳細については23.3を参照してください。
initdbは指定されたデータディレクトリを作成しようと試みますが、そのデータディレクトリの親ディレクトリの所有者がrootであるなど、権限がないことがあります。
このような場合、まず、空のデータディレクトリをrootで作成し、chownを使ってそのディレクトリの所有権限をデータベースのユーザに変えてください。
次にsuを使ってデータベースユーザとなり、initdbを実行します。
initdbは、サーバプロセスの所有者となるユーザによって実行されなければなりません。
initdbによって作成されるファイルやディレクトリにサーバがアクセスできる必要があるからです。
サーバをrootとして実行することはできませんので、rootでinitdbを実行してはいけません
(実際には、実行しようとしても拒否されます)。
セキュリティ上の理由から、デフォルトではinitdbにより作られた新しいクラスタはクラスタの所有者だけがアクセスできます。
--allow-group-accessにより、クラスタの所有者と同じグループのユーザがクラスタ内のファイルを読めるようになります。
これは非特権ユーザとしてバックアップを実行するのに有用です。
initdbは、データベースクラスタのデフォルトのロケールと文字セット符号化方式を初期化します。
これらは、データベースの作成時にデータベースごとに個別に設定することもできます
。
initdbはテンプレートデータベースのこれらの設定を決定します。この設定が他のすべてのデータベースのデフォルトとして提供されます。
デフォルトでは、initdbはロケールプロバイダlibcを使用します(24.1.4を参照してください)。
libcロケールプロバイダは環境からロケール設定を取得し、ロケール設定からエンコーディングを決定します。
クラスタに別のロケールを選択するには、--localeオプションを使用します。
また、個々のロケールカテゴリに値を設定するための個々のオプション--lc-*と--icu-localeもあります(下記参照)。
異なるロケールカテゴリの設定に一貫性がないと、無意味な結果になることがあるので、注意して使用してください。
また、--locale-provider=icuと指定することで、initdbはICUライブラリを使用してロケールサービスを提供することもできます。
サーバがICUをサポートするよう構築されていることが必要です。
適用する特定のICUロケールIDを選択するには、--icu-localeオプションを使用します。
実装上の理由とレガシーコードをサポートするために、initdbはICUロケールプロバイダが使用されている場合でもlibcロケール設定を選択し初期化することに注意してください。
initdbを実行すると、選択したロケール設定を出力します。
複雑な要件がある場合や、複数のオプションを指定した場合は、結果が意図したものと一致するのを確認することをお勧めします。
ロケール設定の詳細については24.1を参照してください。
デフォルトの符号化方式を変更するには、--encodingオプションを使用します。
詳細は24.3に記載しています。
-A authmethod--auth=authmethod #
このオプションは、pg_hba.confで使用されるローカルユーザーのデフォルトの認証方法(hostおよびlocal行)を指定します。
有効な値の概要については21.1を参照してください。
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 #テンプレートデータベースの符号化方式を選択します。 これが今後作成されるすべてのデータベースについてのデフォルト符号化方式となりますが、作成時に上書きすることもできます。 PostgreSQLサーバでサポートされる文字セットについては、24.3.1を参照してください。
デフォルトでは、テンプレートデータベースの符号化方式はロケールに由来します。
--no-localeが指定されている場合(または同等に、ロケールがCまたはPOSIXの場合)、デフォルトはICUプロバイダーではUTF8、libcプロバイダーではSQL_ASCIIになります。
-g--allow-group-access #
クラスタの所有者と同じグループのユーザが、initdbにより作られたクラスタファイルすべてを読むことを許可します。
WindowsではPOSIX形式のグループパーミッションをサポートしませんので、このオプションは無視されます。
--icu-locale=locale #ICUロケールプロバイダを使用する場合に、ICUロケールを指定します。 ロケールサポートは24.1に記載されています。
--icu-rules=rules #デフォルトの照合順序の動作をカスタマイズするための追加の照合順序のルールを指定します。 これはICUでのみサポートされています。
-k--data-checksums #
I/Oシステムによる破損検知を補助するために、データページにおいてチェックサムを使用します。
これがないと警告もされません。
チェックサムを有効にすると、認知できる程度の性能低下が発生する可能性があります。
設定した場合、すべてのデータベースにおいて、すべてのオブジェクトに対してチェックサムが計算されます。
チェックサムの失敗はすべてpg_stat_databaseビューで報告されます。
詳細については30.2を参照してください。
--locale=locale #
データベースクラスタ用のデフォルトのロケールを設定します。
このオプションを指定しない場合は、initdbを実行している環境のロケールが継承されます。
ロケールサポートについては24.1で説明します。
--lc-collate=locale--lc-ctype=locale--lc-messages=locale--lc-monetary=locale--lc-numeric=locale--lc-time=locale #
--localeと似ていますが、指定したカテゴリのロケールのみを設定します。
--no-locale #
--locale=Cと同じです。
--locale-provider={libc|icu} #
このオプションは、新しいクラスタで作成されたデータベースのロケールプロバイダを設定します。
新しいデータベースが後で作成されるときに、CREATE DATABASEコマンドで上書きできます。
デフォルトはlibcです(24.1.4を参照してください)。
-N--no-sync #
デフォルトではinitdbはすべてのファイルが安全にディスクに書き出されるまで待機します。
このオプションを使うとinitdbは待機せずに返るようになり、より高速になりますが、後でオペレーティングシステムがクラッシュした場合にデータディレクトリが破損状態になってしまう可能性があります。
通常、このオプションは試験用では有用ですが、実用のインストレーションを作成する際に使用すべきではありません。
--no-instructions #
デフォルトではinitdbは出力の最後にクラスタを起動する手順を表示します。
このオプションを使うと、これらの手順が省略されます。
これは主にinitdbをプラットフォーム固有の動作でラップするツールで、これらの手順が間違っている可能性がある場合に使用することを目的としています。
--pwfile=filename #
initdbはブートストラップスーパーユーザのパスワードをこのファイルから読み取ります。
このファイルの最初の行がパスワードとして解釈されます。
-S--sync-only #
すべてのデータベースファイルを安全にディスクに書き出し、終了します。
これは通常のinitdbの操作をまったく行いません。
通常、このオプションは、fsyncをoffからonに変更した後の信頼できるリカバリを確実にするのに有用です。
-T config--text-search-config=config #デフォルトの全文検索設定を設定します。 詳細についてはdefault_text_search_configを参照してください。
-U username--username=username #
ブートストラップスーパーユーザのユーザ名を設定します。
デフォルトは、initdbを実行するオペレーティングシステムユーザの名前です。
-W--pwprompt #
initdbにブートストラップスーパーユーザ権限を与えるためのパスワード入力のプロンプトを表示させます。
パスワード認証を行うつもりがない場合は必要ありません。
このオプションを指定しても、パスワードの設定を行わない限りパスワード認証は行われません。
-X directory--waldir=directory #このオプションは先行書き込みログの格納ディレクトリを指定します。
--wal-segsize=size #WALセグメントサイズをメガバイト単位で設定します。 これはWALログの個々のファイルの大きさです。 デフォルトの大きさは16メガバイトです。 値は1から1024の間の2の冪でなければなりません。 このオプションは初期化の際にのみ設定することができ、後で変更することはできません。
WALログのシッピングやアーカイブの粒度を制御するために、この大きさを調整することは有用でしょう。 また、大量のWALのあるデータベースでは、ディレクトリ当たりのWALファイルの数だけでパフォーマンスや管理の問題となり得ます。 WALファイルの大きさを増やせば、WALファイルの数は減るでしょう。
この他にも、使用頻度は下がりますが、下記のオプションが使用可能です。
-c name=value--set name=value #
initdbの間、サーバのパラメータnameを強制的にvalueに設定し、将来のサーバ実行の間も適用されるよう、その設定を生成されたpostgresql.confファイルにも書き込みます。
このオプションは複数のパラメータを設定するために2回以上指定できます。
デフォルトのパラメータを利用するとサーバ全く起動しないような環境で、とりわけ有用でしょう。
-d--debug #
ブートストラップバックエンドからのデバッグ情報と、一般の利用者にはおそらく不要なその他の情報を出力します。
ブートストラップバックエンドとはinitdbがカタログテーブルを作成する際に使用するプログラムです。
このオプションはうんざりするようなログを大量に出力します。
--discard-caches #
debug_discard_caches=1オプションをつけてブートストラップバックエンドを実行します。
これは非常に長い時間がかかるため、難解なデバッグでのみ使用されます。
-L directory #
データベースクラスタを初期化する際に、initdbが参照すべき入力ファイルを指定します。
これは通常必要ありません。
明示的に指定する必要がある場合は、その時に指定するよう要求されます。
-n--no-clean #
デフォルトでは、initdbを実行中にエラーが発生し、データベースクラスタを完成できなかった場合に、そのエラーが発生する前に作成された全てのファイルを削除します。
このオプションを指定すると、これらのファイルが削除しないで残されるので、デバッグの際にはとても便利です。
その他のオプションを以下に示します。
initdbはpg_ctl initdb経由でも呼び出すことができます。