5.2. データベースの作成

データベースを作成する場合、PostgreSQL サーバが起動している必要があります(Section 3.3 を参照してください)。

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

CREATE DATABASE name

name は SQL 識別子の通常の規則に従います。現在のユーザが自動的に新しいデータベースの所有者になります。作成後、データベースを削除する権限はこの所有者にあります(この作業はそのデータベースに属している、所有者のものではないオブジェクトでも、すべて削除されます)。

データベースの作成は限定された作業です。権限の付与に関する詳細はSection 4.2を参照してください。

CREATE DATABASEコマンドを実行するためには、データベースサーバに接続している必要があります。そこで、まずあるサイトの最初のデータベースはどのようにして作成するのかということが問題となります。 最初のデータベースは initdb コマンドでデータの格納領域スペースが初期化されるとき必ず作成されます (Section 3.2 を参照して下さい)。慣習的にこのデータベースはtemplate1 と呼ばれます。したがって、最初の"本当の"データベースを作成するにはtemplate1に接続してください。

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

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

createdb dbname

createdb は魔法ではありません、それは template1データベースに接続し、先に解説した通りに CREATE DATABASE コマンドを実行します。内部的にpsqlプログラムを使用しています。createdb のリファレンスページに起動の詳細が説明されています。また、引数のない createdb は現在のユーザ名のデータベースを作成しますので、注意してください。

Note: 特定のデータベースに誰が接続できるかを制限する方法については Chapter 6 に記載されています。

他のユーザのためにデータベースを作成する場合も考えられます。データベースを自分で設定して管理できるように、そのユーザを新しいデータベースの所有者とする必要があります。そのためには、次のコマンドのいずれかを使用します。

CREATE DATABASE dbname OWNER username;

を SQL 環境から使用するか、

 createdb -O username dbname

を使用します。 他のユーザのためにデータベースを作成するには、スーパーユーザである必要があります。