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

21.2. データベースの作成

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

CREATE DATABASESQLコマンドでデータベースを作成することができます。

CREATE DATABASE name;

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

データベースの作成は制限された作業です。 権限の付与に関する詳細は20.2. ロールの属性を参照してください。

CREATE DATABASEコマンドを実行するためには、データベースサーバに接続している必要があります。 そうすると、あるサイトの最初のデータベースはどのようにして作成するのかという疑問が出てきます。 最初のデータベースはinitdbコマンドでデータ格納領域が初期化される時、必ず作成されます。 (17.2. データベースクラスタの作成を参照してください。) このデータベースはpostgresと呼ばれます。 したがって、最初の通常のデータベースを作成するにはpostgresに接続してください。

また、template1という2つ目のデータベースもデータベースクラスタの初期化時に作成されます。 クラスタ内に新しいデータベースが作成されたら、実際にtemplate1が複製されます。 つまりtemplate1に変更を与えると、その後に作成されるデータベースすべてにその変更が反映されることを意味します。 このため新しく作成するデータベースすべてに反映させたい場合でない限りtemplate1内にオブジェクトを作成することは避けてください。 詳細については21.3. テンプレートデータベースを参照してください。

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

createdb dbname

createdbは魔法ではありません。 これはpostgresデータベースに接続し、先に解説した通りにCREATE DATABASEコマンドを実行します。 createdbのマニュアルページに実行方法の詳細が説明されています。 引数のないcreatedbは現在のユーザ名のデータベースを作成しますので、注意してください。

注記

特定のデータベースに誰が接続できるかを制限する方法については19章クライアント認証に記載されています。

他のユーザのためにデータベースを作成し、そのユーザ自身が設定、管理できるように新しいデータベースの所有者にさせたい場合も考えられます。 そのためには、次のコマンドのいずれかを使用します。 SQL環境からであれば前者を、さもなくば後者をシェルから使用してください。

CREATE DATABASE dbname OWNER rolename;

createdb -O rolename dbname

他のユーザのために(つまり、自身がメンバではないロールのために)データベースを作成することができるのはスーパーユーザだけです。