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サーバでサポートされる文字セットについては項22.2.1で説明します。 この他の制限については後述します。
新しいデータベースに関連付けされるデフォルトのテーブル空間名です。テンプレートデータベースのテーブル空間を使用する場合は、DEFAULTと指定します。 このテーブル空間が、このデータベースで作成されるオブジェクトのデフォルトのテーブル空間となります。 詳細はCREATE TABLESPACEを参照してください。
このデータベースで確立できる同時接続数です。 -1(デフォルト)は無制限を意味します。
省略可能なパラメータは、任意の順番で記述できます。上記の順番で記述しなくても構いません。
CREATE DATABASEはトランザクションブロックの内側では実行できません。
ほとんどの場合、"could not initialize database directory"という行が含まれるエラーは、データディレクトリの権限不足、ディスク容量不足などファイルシステムについての問題に関連するものです。
データベースを削除するにはDROP DATABASEを使用してください。
createdbプログラムは利便性のために提供される、このコマンドのラッパプログラムです。
template1以外のデータベースの名前をテンプレートに指定してデータベースをコピーすることは可能ですが、これは(まだ)一般的に使用する"COPY DATABASE"機能として意図されているわけではありません。 主な制限は、コピー中に他のセッションからテンプレートデータベースへの接続ができないことです。 CREATE DATABASEは、開始した時に他の接続があると失敗します。 テンプレートデータベースへの新規接続はCREATE DATABASEが完了するまでロックされます。 詳細は項20.3を参照してください。
新しいデータベース用に指定される文字セット符号化方式はすべて、サーバのLC_CTYPEロケール設定と互換性がなければなりません。 LC_CTYPEがC(や同等のPOSIX)であれば、すべての符号化方式が許されますが、他のロケール設定では適切に動作する符号化方式は1つしかありません。 このため、データベースクラスタをロケールCで初期化していなければ、見かけ上符号化方式の指定に関する自由は実在しません。 CREATE DATABASEでは、ロケール設定に関係なくスーパーユーザがSQL_ASCII符号化方式を指定することを許していますが、こうした選択は廃止予定であり、データベース内にロケールと互換性がない符号化方式でデータが格納された場合、文字列関数の誤動作を多く引き起こします。
CONNECTION LIMITは厳密な制限ではありません。 データベース向けの接続"スロット"が1つ残っていた時に同時に2つの新しいセッション開始要求があった場合、両方とも失敗する可能性があります。 また、この制限はスーパーユーザには強制されません。