他のバージョンの文書 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

3.2. データベースクラスタの作成

まず第一に、ディスク上にデータベース格納領域を初期化する必要があります。この格納領域がデータベースクラスタと呼ばれるものです(SQLでは代わりにカタログクラスタと呼びます)。データベースクラスタはデータベースの集合で、稼働しているデータベースサーバーの1 つのインスタンスを通してアクセスすることができます。初期化が終わると、データベースクラスタにはtemplate1と呼ばれるデータベースが1 つ作成されています。その名前から推測できるように、これはその後に作成されるデータベースのテンプレートとして使われます。したがって、実際の作業に使用すべきではありません。

ファイルシステムの観点から見ると、データベースクラスタというのは、すべてのデータが格納される1つのディレクトリということになります。これは データディレクトリもしくは データ領域と呼ばれます。どこにデータを格納するかは完全にユーザの自由で、特にデフォルトの領域はありません。一般的によく使われるのは/usr/local/pgsql/data/var/lib/pgsql/dataです。データベースクラスタを初期化するためには、PostgreSQLと一緒にインストールされるコマンドinitdbを使います。データベースシステムの中で必要なファイルシステムの場所はオプション-Dで示します。たとえば次のようにします。

$ initdb -D /usr/local/pgsql/data

前節で説明したように、このコマンドはPostgreSQL ユーザアカウントでログインしている間に実行する必要があります。

Tip: オプション-Dを使う代わりに環境変数 PGDATAを設定することもできます。

もし指定したディレクトリが存在しない場合は、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は実行を拒否します。

データディレクトリにはデータベースの中のすべてのデータが保持されるため、権限を持たない人のアクセスを制限することが大切です。ですから、 initdbPostgreSQLユーザアカウント以外にはアクセス権を与えません。

しかし、ディレクトリの内容は安全ですが、デフォルトの pg_hba.confの認証方式 trust では、全てのローカルユーザはデータベースに接続でき、データベーススーパユーザになることさえ可能です。他のローカルユーザを信用しない場合、 initdb のオプション -W または --pwprompt を使用して、データベーススーパユーザにパスワードを付与して下さい。initdb の後、初回のサーバの起動の に、trust ではなく、md5 または password 認証を使用するように pg_hba.conf を変更して下さい。(他にも、より簡単な方法として、ident 認証やファイルシステムの権限を使用して、接続を制限することもできます。より詳細については Chapter 4 を参照して下さい。)

initdbを実行し、下記のような注意メッセージが表示されて驚く場合があるかもしれません。

NOTICE:  Initializing database with en_US collation order.
        This locale setting will prevent use of index optimization for
        LIKE and regexp searches.  If you are concerned about speed of
        such queries, you may wish to set LC_COLLATE to "C" and
        re-initdb.  For more information see the Administrator's Guide.

この注意メッセージは、現在選択されているロケールでは、インデックスをソートする際にLIKEや正規表現検索を使用しないということを警告しています。LIKEや正規表現のような検索で高い性能を望む場合は、ロケールをC にしてinitdbを再実行してください。ほとんどのシステムにおいて、ロケールの設定は環境変数LC_ALL、もしくは LANGの値を変えることで行います。特定のデータベースクラスタで使われるソートの順番はinitdbで設定されます。後に設定を変更したい場合は、すべてのデータをダンプし、再び initdbを行ってデータを再読み込みする必要がありますので、ここで正しい選択をしておくことが大切です。