データベースを作成する場合、PostgreSQLサーバが起動している必要があります(項17.3を参照してください)。
CREATE DATABASE: SQLコマンドでデータベースを作成することができます。
CREATE DATABASE name;
ここで、nameはSQL識別子の通常の規則に従います。 現在のロールが自動的に新しいデータベースの所有者になります。 作成後、データベースを削除する権限はこの所有者にあります(この作業では、そのデータベースに属している、所有者のものではないオブジェクトでも、全て削除されます)。
データベースの作成は制限された作業です。 権限の付与に関する詳細は項19.2を参照してください。
CREATE DATABASEコマンドを実行するためには、データベースサーバに接続している必要があります。 そうすると、まずあるサイトの最初のデータベースはどのようにして作成するのかという疑問が出てきます。 最初のデータベースはinitdbコマンドでデータ格納領域が初期化される時、必ず作成されます (項17.2を参照してください)。 このデータベースはpostgresと呼ばれます。 したがって、最初の"通常の"データベースを作成するにはpostgresに接続してください。
また、template1という2つ目のデータベースもinitdbで作成されます。 クラスタ内に新しいデータベースが作成されたら、実際にtemplate1が複製されます。 したがって、template1に変更を与えると、その後に作成されるデータベース全てにその変更が反映されます。 このため実際の作業で、その効果が有効である場合以外はテンプレートデータベースを実際に使用することは避けてください。 詳細については項20.3を参照してください。
利便性のために、シェルからcreatedbを実行して、新しいデータベースを作成することができます。
createdb dbname
createdbは魔法ではありません。 これはpostgresデータベースに接続し、先に解説した通りにCREATE DATABASEコマンドを実行します。 createdbのリファレンスページに起動の詳細が説明されています。 また、引数のないcreatedbは現在のユーザ名のデータベースを作成しますので、注意してください。 これは希望するものであるかもしれませんし、希望しないものかもしれません。
注意: 特定のデータベースに誰が接続できるかを制限する方法については第21章に記載されています。
他のユーザのためにデータベースを作成する場合も考えられます。 データベースをそのロールが自分で設定して管理できるように、そのロールを新しいデータベースの所有者とする必要があります。 そのためには、次のコマンドのいずれかを使用します。 SQL環境からであれば前者を、さもなくば後者をシェルから使用してください。
CREATE DATABASE dbname OWNER rolename;
createdb -O rolename dbname
他のユーザのために(つまり、自身がメンバではないロールのために)データベースを作成するには、スーパーユーザである必要があります。