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
経由でも呼び出すことができます。