他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

initdb

initdbPostgreSQLのデータベースクラスタを新しく作成する

概要

initdb [option...] [ --pgdata | -D ] directory

説明

initdbPostgreSQLのデータベースクラスタを新しく作成します。 データベースクラスタとは、1つのサーバインスタンスで管理されるデータベースの集合です。

データベースクラスタの作成には、データベースのデータを保存するディレクトリの作成、共有カタログテーブル(特定のデータベースではなく、クラスタ全体に所属するテーブル)の生成、そしてpostgresデータベース、template1データベース、template0データベースの作成といった作業が含まれます。 postgresデータベースは、ユーザ、ユーティリティ、サードパーティ製アプリケーションのデフォルトデータベースとしての使用を意図したものです。 template1template0は、後の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を使用し、環境からロケール設定を取得し、ロケール設定から符号化方式を決定します。 これは、特別な要件がない限り、ほぼ常に十分です。

クラスタに別のロケールを選択するには、--localeオプションを使用します。 また、個々のロケールカテゴリに値を設定するための個々のオプション--lc-*もあります(下記参照)。 異なるロケールカテゴリの設定に一貫性がないと、無意味な結果になることがあるので、注意して使用してください。

また、ICUライブラリを使用してロケールサービスを提供することもできます。 (これも後で作成されるデータベースのデフォルトを設定するだけです。) このオプションを選択するには、--locale-provider=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

テンプレートデータベースの符号化方式を選択します。 これが今後作成されるすべてのデータベースについてのデフォルト符号化方式となりますが、作成時に上書きすることもできます。 デフォルトは、libcロケールプロバイダが使われていればロケールから取得し、ICUロケールプロバイダが使われていればUTF8になります。 PostgreSQLサーバによってサポートされる文字セットについては24.3.1で説明します。

-g
--allow-group-access

クラスタの所有者と同じグループのユーザが、initdbにより作られたクラスタファイルすべてを読むことを許可します。 WindowsではPOSIX形式のグループパーミッションをサポートしませんので、このオプションは無視されます。

--icu-locale=locale

ICUロケールプロバイダが使われている場合は、ICUロケールIDを指定します。

-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です。

-N
--no-sync

デフォルトではinitdbはすべてのファイルが安全にディスクに書き出されるまで待機します。 このオプションを使うとinitdbは待機せずに返るようになり、より高速になりますが、後でオペレーティングシステムがクラッシュした場合にデータディレクトリが破損状態になってしまう可能性があります。 通常、このオプションは試験用では有用ですが、実用のインストレーションを作成する際に使用すべきではありません。

--no-instructions

デフォルトではinitdbは出力の最後にクラスタを起動する手順を表示します。 このオプションを使うと、これらの手順が省略されます。 これは主にinitdbをプラットフォーム固有の動作でラップするツールで、これらの手順が間違っている可能性がある場合に使用することを目的としています。

--pwfile=filename

initdbはデータベーススーパーユーザのパスワードをこのファイルから読み取ります。 このファイルの最初の行がパスワードとして解釈されます。

-S
--sync-only

すべてのデータベースファイルを安全にディスクに書き出し、終了します。 これは通常のinitdbの操作をまったく行いません。 通常、このオプションは、fsyncoffからonに変更した後の信頼できるリカバリを確実にするのに有用です。

-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=size

WALセグメントサイズをメガバイト単位で設定します。 これはWALログの個々のファイルの大きさです。 デフォルトの大きさは16メガバイトです。 値は1から1024の間の2の冪でなければなりません。 このオプションは初期化の際にのみ設定することができ、後で変更することはできません。

WALログのシッピングやアーカイブの粒度を制御するために、この大きさを調整することは有用でしょう。 また、大量のWALのあるデータベースでは、ディレクトリ当たりのWALファイルの数だけでパフォーマンスや管理の問題となり得ます。 WALファイルの大きさを増やせば、WALファイルの数は減るでしょう。

この他にも、使用頻度は下がりますが、下記のオプションが使用可能です。

-d
--debug

ブートストラップバックエンドからのデバッグ情報と、一般の利用者にはおそらく不要なその他の情報を出力します。 ブートストラップバックエンドとはinitdbがカタログテーブルを作成する際に使用するプログラムです。 このオプションはうんざりするようなログを大量に出力します。

--discard-caches

debug_discard_caches=1オプションをつけてブートストラップバックエンドを実行します。 これは非常に長い時間がかかるため、難解なデバッグでのみ使用されます。

-L directory

データベースクラスタを初期化する際に、initdbが参照すべき入力ファイルを指定します。 これは通常必要ありません。 明示的に指定する必要がある場合は、その時に指定するよう要求されます。

-n
--no-clean

デフォルトでは、initdbを実行中にエラーが発生し、データベースクラスタを完成できなかった場合に、そのエラーが発生する前に作成された全てのファイルを削除します。 このオプションを指定すると、これらのファイルが削除しないで残されるので、デバッグの際にはとても便利です。

その他のオプションを以下に示します。

-V
--version

initdbのバージョンを表示し、終了します。

-?
--help

initdbのコマンドライン引数の使用方法を表示し、終了します。

環境

PGDATA

データベースクラスタを保存するディレクトリを指定します。 -Dオプションを使用して上書きすることができます。

PG_COLOR

診断メッセージで色を使うかどうかを指定します。 可能な値はalwaysautoneverです。

TZ

作成されるデータベースクラスタのデフォルトの時間帯を指定します。 値は完全な時間帯の名前で指定することが望ましいです(8.5.3参照)。

また、このユーティリティは、他のほとんどのPostgreSQLユーティリティと同様、libpqでサポートされる環境変数を使用します(34.15を参照してください)。

注釈

initdbpg_ctl initdb経由でも呼び出すことができます。

関連項目

pg_ctl, postgres, 21.1