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

PostgreSQL 8.0.0 文書
前のページ | 巻戻し | 第 16章サーバ実行時環境 | 早送り | 次のページ

# 16.2. データベースクラスタの作成

まず第一に、ディスク上にデータベース格納領域を初期化する必要があります。 この格納領域を データベースクラスタ と呼びます (SQLではカタログクラスタという用語が使用されます)。 データベースクラスタはデータベースの集合で、稼働しているデータベースサーバのただ1つのインスタンスを通して管理されます。 初期化が終わると、データベースクラスタには`template1`という名前のデータベースが含まれています。 その名前から推測できるように、これはその後に作成されるデータベースのテンプレートとして使われます。 従って、実際の作業に使用すべきではありません。 （クラスタ内における新しいデータベースの作成については第18章を参照してください。）

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

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

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

> ティップ: `-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`は実行を拒否します。

データディレクトリにはデータベースの中の全てのデータが保持されるため、権限を持たない人のアクセスを確実に制限することが不可欠です。 ですから、`initdb`はPostgreSQLユーザ以外にはアクセス権を与えません。

しかし、ディレクトリの内容は安全ですが、デフォルトのクライアント認証の設定では、全てのローカルユーザはデータベースに接続でき、データベーススーパユーザになることさえ可能です。 他のローカルユーザを信用しない場合、`initdb`の`-W`、`--pwprompt`、`--pwfile`オプションのいずれか1つを使用して、データベーススーパユーザにパスワードを付与することを推奨します。 また、デフォルトの`trust`認証モードを使用しないように、`-A md5`もしくは`-A password`を指定してください。 もしくは、`initdb`の後、初回のサーバの起動の前に、生成済みの`pg_hba.conf`ファイルを変更してください。 (他の穏当な方法として、`ident`認証やファイルシステムの権限を使用して、接続を制限することもできます。 詳細については第19章を参照してください。)

`initdb`はまた、データベースクラスタのデフォルトのロケールを初期化します。 通常は、環境のロケール設定を初期化されたデータベースにそのまま適用します。 データベースに異なるロケールを指定することも可能です。 詳細については項20.1を参照してください。 特定のデータベースクラスタ内で使用されるソート順は`initdb`で設定され、`initdb`後は全データをダンプし、`initdb`を再実行し、ダンプしたデータを再読み込みさせる手順を踏む以外変更することができません。 また、`C`や`POSIX`以外のロケールを使用する場合には性能上の影響もあります。 従って、最初の時点でこの選択を正しく行なうことが重要です。

また`initdb`は、データベースクラスタのデフォルトの文字セット符号化方式も設定します。 通常これは、ロケールの設定と合うものが選ばれなければなりません。 詳細は項20.2を参照してください。

前のページ | ホーム | 次のページ
サーバ実行時環境 | 上に戻る | データベースサーバの起動