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