Chapter 6. データベース管理

Table of Contents
6.1. データベースの作成
6.2. データベースへの接続
6.3. データベースの削除

データベースとは、SQLオブジェクト("database objects")の 名称集合(named collection)です。すべてのデータベースオブジェクト (テーブル、関数など)は1つのデータベースに所有されています。 データベースサーバに接続するアプリケーションは、接続したいデータベース名 を特定して接続します。1つの接続で2つ以上のデータベースに接続することは できません。(しかし、アプリケーションとデータベースとの接続数は 制限がありません。)

Note: SQLでは、データベースを"catalogs"と呼ぶことも ありますが、違いはありません。

データベースを作成、もしくは削除する場合、Postgrespostmasterが起動している必要があります。 (Section 3.3をご覧ください。)

6.1. データベースの作成

問い合わせ言語コマンド、CREATE DATABASEで データベースを作成することができます。

CREATE DATABASE name
nameは自由に変更することができます。 (現在の実装では、OS環境下の特定の文字は使用することができないことが あります。その場合、ランタイムで検証が行われます。) 現在のユーザは自動的に新しいデータベースの所有者となります。 作成後、データベースを削除する権限はこの所有者にあります (この作業はそのデータベースに属している、所有者のものではない オブジェクトでも、すべて削除されます。)

データベースの作成は限定された作業です。 権限の承諾に関する詳細はSection 7.1.1

ブートストラッピング (Bootstrapping). CREATE DATABASEコマンドを実行するためには データベースサーバに接続している必要があります。 そこで、まず最初のデータベースはどのようにして 作成するのかということが問題となります。最初のデータベースは initdbコマンドでデータの格納スペースが初期化される時に 必ずテンプレート1という名前で作成されます。テンプレート1 データベースは削除することはできません。したがって、最初の "本当の"データベースを作成するにはテンプレート1と 接続してください。

"テンプレート1"という名前は付随的なものではありません。 新しいデータベースが作成されたら、実質テンプレートデータベースが 複製されます。したがって、テンプレート1に変更を 与えるとその後に作成されるデータベースすべてにその変更が 反映されます。つまり、実際の作業で、その効果が有効である場合以外は テンプレートデータベースを実際に使用することは避けてください。

また、便利よくするために、シェルからcreatedbを 実行して、新しいデータベースを作成することができます。

createdb dbname
createdbはテンプレート1データベースと接続し、上記でも明記しているように、 CREATE DATABASEコマンドを実行します。内部的に psqlプログラムを使用しています。createdbの 参照ページに起動の詳細が書かれています。また、引数のないcreatedbは 現在のユーザ名のデータベースを作成しますので、ご注意下さい。

6.1.1. データベースの代替領域

データベースをデフォルトの領域以外の場所に作成することも 可能です。データベースへの接続はデータベースサーババックエンドを 通じて行われるので、それらの領域はバックエンドから接続可能で ある必要があります。

データベースの代替領域は絶対パスである環境変数を使って 参照されます。この環境変数はバックエンドが起動する前に定義されている 必要があります。代替領域の環境変数名として特に使用しなければならない名は ありませんが、混乱を避けるためにPGDATAを接頭に使用することを お勧めします。

サーバプロセスの環境変数を作成するには、まずサーバを停止させ、 変数を定義してからデータ領域を初期化し、サーバを再起動させます。 (Section 3.6Section 3.3 を参照して下さい。)環境変数を設定するには、Bournシェルでは

PGDATA2=/home/postgres/data
export PGDATA2

と入力して下さい。 また、csh、tcshでは

setenv PGDATA2 /home/postgres/data

と入力して下さい。環境変数はサーバの環境内で定義されていることを 必ず確認して下さい。正しく設定されていなければデータベースに 接続することはできません。したがって、環境変数はシェルの起動ファイルや サーバの起動スクリプト内に定義することをお勧めします。

PGDATA2にデータ記憶領域を作成する際、 /home/postgresがすでに存在することを確認し、 サーバを起動させているユーザが書き込めるようになっていることを 確認して下さい(Section 3.1 を参照して下さい )。 コマンドラインで

initlocation PGDATA2

のように入力して下さい。 サーバを再起動できます。

データベースを新たな領域に作成するには、下記のコマンドを実行して下さい。

CREATE DATABASE name WITH LOCATION = 'location'
locationには使用する環境変数を(この場合はPGDATA2) を入力します。createdb-Dオプションはこの ためにあります。

代替領域に作成されたデータベースも他のデータベースと同様に 接続したり、削除したりできます。

Note: 環境変数に絶対パスを定義しないで、 CREATE DATABASEコマンドに 直接指定することも可能です。しかし、これはセキュリティーの関係で デフォルトでは使用できないようになっています。可能にするには Postgresをコンパイルする時にCプリプロセサーの マクロALLOW_ABSOLUTE_DBPATHSを定義する必要があります。 これの一例として、コンパイルの時に gmake CPPFLAGS=-DALLOW_ABSOLUTE_DBPATHS allとする方法があります。