18.5. 代替領域

インストーレーションのデフォルトの領域以外にも、データベースを作成することが可能です。 しかし、すべてのデータベースアクセスはデータベースサーバを通じて発生するため、指定されたいかなる領域もサーバからアクセスできる必要があります。

代替のデータベース領域へは、意図された記憶領域への絶対パスを指定する環境変数を使って参照されます。 この環境変数はサーバの環境に存在し、また、サーバが起動する前に設定されていなければなりません(従って、利用可能な代替領域群はサイト管理者の管理下にあります。一般ユーザは変更することができません)。 いかなる名前の環境変数を代替領域を参照するために使用することができます。 しかし、他の変数との衝突や混乱をさけるために、環境変数をPGDATA から始まる名前にすることを推奨します。

サーバプロセス環境に変数を作成するために、まず、サーバを停止し、変数を定義し、データ領域を初期化し、最後にサーバを再起動する必要があります(項16.6項16.3を参照して下さい)。 環境変数を設定するには、

PGDATA2=/home/postgres/data
export PGDATA2

を Bourne シェルで実行するか、または

setenv PGDATA2 /home/postgres/data

cshtcsh で実行します。 この環境変数が常にサーバの環境で定義されることを確認して下さい。 さもないと、そのデータベースへアクセスすることができません。 ですので、シェルの初期化ファイルやサーバの起動スクリプトなどに設定する方が良いでしょう。

データ格納領域を PGDATA2 に作成する場合、対応するディレクトリ(ここでは、/home/postgres)が既に存在し、サーバを起動するユーザアカウント(項16.1 を参照)によって書き込み可能であることを確認して下さい。 その後、コマンドラインから以下を入力して下さい。

initlocation PGDATA2

(initlocation $PGDATA2 ではありません。) そして、サーバを再起動します。

新しい領域にデータベースを作成するためには、以下のコマンドを使用します。

CREATE DATABASE name WITH LOCATION 'location';

ここで、location は使用した環境変数です。 今回の例では PGDATA2 です。 createdb には、この目的用の -D オプションがあります。

代替領域に作成されたデータベースは他のデータベースと同じようにアクセスすることができます。

注意: 環境変数を設定することなく、絶対パスを直接 CREATE DATABASE コマンドに指定することも可能です。 これは、セキュリティ上の問題がありますので、デフォルトでは使用することができません。 使用できるようにするには、ALLOW_ABSOLUTE_DBPATHS という C プリプロセッサマクロを定義してPostgreSQL をコンパイルしなければなりません。 コンパイル時に以下のようにすることが、実現方法の1つです。

gmake CPPFLAGS=-DALLOW_ABSOLUTE_DBPATHS all