まず第一に、ディスク上にデータベース格納領域を初期化する必要があります。 この格納領域を データベースクラスタ と呼びます (SQL では、代わりにカタログクラスタという用語が使用されます)。データベースクラスタはデータベースの集合で、稼働しているデータベースサーバのただ 1つのインスタンスを通してアクセスすることができます。初期化が終わると、データベースクラスタには template1 という名前のデータベースが 1 つ作成されています。その名前から推測できるように、これはその後に作成されるデータベースのテンプレートとして使われます。したがって、実際の作業に使用すべきではありません。(データベースの作成については Chapter 5 を参照して下さい。)
ファイルシステムの観点から見ると、データベースクラスタというのは、すべてのデータが格納される 1 つのディレクトリということになります。これは データディレクトリ もしくは データ領域 と呼ばれます。どこにデータを格納するかは完全にユーザの自由で、特にデフォルトの領域はありません。一般的によく使われるのは /usr/local/pgsql/data か /var/lib/pgsql/data です。データベースクラスタを初期化するためには、PostgreSQL と一緒にインストールされるコマンド initdb を使います。データベースシステムのファイルシステムの場所は、オプション -D で示します。たとえば次のようにします。
$ initdb -D /usr/local/pgsql/data
このコマンドは、前節で説明した PostgreSQL ユーザアカウントでログインして実行する必要があります。
もし指定したディレクトリが存在しない場合は、initdb はその新しいディレクトリを作成しようとします。しかし(ここのアドバイスにしたがって権限を持たないアカウントで作成した場合など)作成権限がない場合があります。その場合は(root として)手動でディレクトリを作成し、所有者を PostgreSQL ユーザに変更します。下記がその例となります。
root# mkdir /usr/local/pgsql/data root# chown postgres /usr/local/pgsql/data root# su postgres postgres$ initdb -D /usr/local/pgsql/data
データディレクトリがすでに初期化されているように見える場合は、initdb は実行を拒否します。
データディレクトリにはデータベースの中のすべてのデータが保持されるため、権限を持たない人のアクセスを確実に制限することが不可欠です。ですから、initdb は PostgreSQL ユーザ以外にはアクセス権を与えません。
しかし、ディレクトリの内容は安全ですが、デフォルトのクライアント認証の設定では、全てのローカルユーザはデータベースに接続でき、データベーススーパユーザになることさえ可能です。他のローカルユーザを信用しない場合、initdb の -W または --pwprompt オプションを使用して、データベーススーパユーザにパスワードを付与して下さい。initdb の後、初回のサーバの起動の前 に、trust ではなく、md5 または password 認証を使用するように pg_hba.conf ファイルを変更して下さい。(他の方法として、ident 認証やファイルシステムの権限を使用して、接続を制限することもできます。詳細については Chapter 6 を参照して下さい。
initdb はまた、データベースクラスタのデフォルトのロケールを初期化します。通常は、環境のロケール設定を初期化されたデータベースにそのまま適用します。データベースに異なるロケールを指定することも可能です。詳細については Section 7.1 を参照して下さい。initdbを実行すると、次のような注意メッセージが表示されて驚く場合があるかもしれません。
The database cluster will be initialized with locale de_DE. This locale setting will prevent the use of indexes for pattern matching operations.If that is a concern, rerun initdb with the collation order set to "C".For more information see the Administrator's Guide.
この注意メッセージは、現在選択されているロケールでは、LIKE や正規表現検索に使用できない順序にインデックスがソートされることを警告しています。LIKE や正規表現のような検索で高い性能を望む場合は、ロケールを C にして initdb を再実行してください。たとえば、initdb --lc-collate=C を実行します。 特定のデータベースクラスタで使われるソートの順番は initdb で設定されます。 後で設定を変更したい場合は、すべてのデータをダンプし、再び initdb を行ってデータを再読み込みする必要がありますので、最初に正しい選択をしておくことが大切です。