CREATE DATABASE name [ [ WITH ] [ OWNER [=] dbowner ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] [ TABLESPACE [=] tablespace ] [ CONNECTION LIMIT [=] connlimit ] ]
CREATE DATABASEは新しいPostgreSQLデータベースを作成します。
データベースを作成するには、スーパーユーザ、もしくはCREATEDBという特別な権限を持つユーザである必要があります。 CREATE USERを参照してください。
通常、データベースの作成者がその新しいデータベースの所有者になります。 スーパーユーザは、OWNER句を使用することにより、他のユーザを所有者とするデータベースを作成できます。 スーパーユーザは、特別な権限を保持していないユーザを所有者とするデータベースを作成できます。 スーパーユーザではないCREATEDB権限を保持するユーザは、自分自身を所有者とするデータベースのみ作成できます。
デフォルトでは、新しいデータベースは標準システムデータベースtemplate1を複製することによって作成されます。 他のテンプレートを指定するには、TEMPLATE nameと記述します。 特に、TEMPLATE template0と記述することで、そのバージョンのPostgreSQLによって定義済みの標準オブジェクトのみを持つ、新しいデータベースを作ることができます。 これは、template1に独自にインストールして追加したオブジェクトをコピーしたくない場合に便利です。
作成するデータベースの名前です。
新しいデータベースを所有するデータベースユーザの名前です。 デフォルト設定(つまり、コマンドを実行したユーザ)を使用する場合はDEFAULTと指定します。
新しいデータベースを作成元となるテンプレートの名前です。 デフォルトテンプレート(template1)を使う場合は、DEFAULTと指定します。
新しいデータベースで使われる文字セット符号化方式です。 文字列定数(例えば'SQL_ASCII')、整数の符号化方式番号、デフォルトの符号化方式(すなわちテンプレートデータベースの符号化方式)を使うDEFAULTのいずれかを指定します。 PostgreSQLサーバでサポートされる文字セットについては項21.2.1で説明します。
新しいデータベースに関連付けされるデフォルトのテーブル空間名です。テンプレートデータベースのテーブル空間を使用する場合は、DEFAULTと指定します。 このテーブル空間が、このデータベースで作成されるオブジェクトのデフォルトのテーブル空間となります。 詳細はCREATE TABLESPACEを参照してください。
このデータベースで確立できる同時接続数です。 -1(デフォルト)は無制限を意味します。
省略可能なパラメータは、任意の順番で記述できます。上記の順番で記述しなくても構いません。
CREATE DATABASEはトランザクションブロックの内側では実行できません。
ほとんどの場合、"could not initialize database directory"という行が含まれるエラーは、データディレクトリの権限不足、ディスク容量不足などファイルシステムについての問題に関連するものです。
データベースを削除するにはDROP DATABASEを使用してください。
createdbプログラムは利便性のために提供される、このコマンドのラッパプログラムです。
template1以外のデータベースの名前をテンプレートに指定してデータベースをコピーすることは可能ですが、これは(まだ)一般的に使用する"COPY DATABASE"機能として意図されているわけではありません。 主な制限は、コピー中に他のセッションからテンプレートデータベースへの接続ができないことです。 CREATE DATABASEは、開始した時に他の接続があると失敗します。 テンプレートデータベースへの新規接続はCREATE DATABASEが完了するまでロックされます。 詳細は項19.3を参照してください。
CONNECTION LIMITは厳密な制限ではありません。 データベース向けの接続"スロット"が1つ残っていた時に同時に2つの新しいセッション開始要求があった場合、両方とも失敗する可能性があります。 また、この制限はスーパーユーザには強制されません。