[11/15開催: PostgreSQL Conference Japan 2019 参加受付中] 
他のバージョンの文書 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

CREATE DATABASE

名前

CREATE DATABASE -- 新しいデータベースの作成

概要

CREATE DATABASE name
    [ [ WITH ] [ OWNER [=] dbowner ]
           [ LOCATION [=] 'dbpath' ]
           [ TEMPLATE [=] template ]
           [ ENCODING [=] encoding ] ]

説明

CREATE DATABASEは新しい PostgreSQLデータベースを作成します。

データベースを作成するためには、スーパーユーザであるか、特別なCREATEDB権限が必要です。 CREATE USERを参照してください。

通常、データベースの作成者がその新しいデータベースの所有者になります。 スーパーユーザは、OWNER 句を使用することにより、他のユーザを所有者とするデータベースを作成できます。 スーパーユーザは、特別な権限を保持していないユーザを所有者とするデータベースを作成できます。 スーパーユーザではない CREATEDB 権限を保持するユーザは、自分自身が所有するデータベースのみ作成できます。

たとえば別のディスクにデータベースを格納したりするために、代わりの場所を指定することができます。 そのパスは initlocation コマンドであらかじめ用意しておく必要があります。

もしパス名がスラッシュ(/)を含まない場合、環境変数名として解釈されます。 この環境変数はサーバプロセスに知らせなければなりません。 この方法でデータベース管理者はデータベースを作ることができる場所を管理することができます (慣習的な選択例は PGDATA2 です)。 もしサーバがALLOW_ABSOLUTE_DBPATHSでコンパイルされている場合(デフォルトではそうではありません)、スラッシュで始まることで識別される絶対パス名(たとえば、/usr/local/pgsql/data)も使用することができます。 どちらの場合でも、最終的なパス名は絶対パスでなければならず、単一引用符を含んではなりません。

デフォルトでは、新しいデータベースは標準システムデータベース template1 を複製することによって作成されます。 別のテンプレートは TEMPLATE name と書くことで指定できます。 特に、TEMPLATE template0と書くことで、使用している PostgreSQL のバージョンによって定義済みの標準オブジェクトのみを持つ新しいデータベースを作ることができます。 これは、もし template1 に追加された、独自にインストールしたオブジェクトのコピーを避けたいという場合に便利です。

オプションの符合化方式パラメータを使用してデータベース符合化方式を選択することができます。 指定されないと、選択されたテンプレートデータベースで使われる符合化方式がデフォルトになります。

パラメータ

name

作成するデータベースの名前です。

dbowner

新しいデータベースを所有するデータベースユーザの名前です。 もしくは、デフォルト設定 (つまり、コマンドを実行したユーザ) を使用するには、DEFAULT とします。

dbpath

新しいデータベースを格納するためのファイルシステムの代わりの場所で、文字列リテラルとして指定されます。 もしくはデフォルトの場所を使う場合はDEFAULTです。

template

新しいデータベースを作成するテンプレートの名前、もしくはデフォルトテンプレート(template1)を使うDEFAULTです。

encoding

新しいデータベースで使われるマルチバイト符号化方式です。 文字列定数(たとえば'SQL_ASCII')、もしくは整数の符号化番号、もしくはデフォルトの符号化方式を使う DEFAULT です。

省略可能なパラメータは、上述の順番だけでなく、任意の順番で記述できます。

注釈

CREATE DATABASEはトランザクションブロックの内側では実行できません。

ほとんどの場合、"could not initialize database directory"という行が含まれるエラーは、データディスクの権限不足、ディスク容量不足などファイルシステムについての問題に関連するものです。 代替の場所を使用する場合、データベースサーバを稼働するユーザがその場所にアクセスできなければなりません。

データベースを削除するにはDROP DATABASEを使用して下さい。

createdb プログラムは利便性のために提供される、このコマンドのラッパプログラムです。

絶対パス名による代わりのデータベースの場所の指定を使用することには、セキュリティ上の問題があります。 そのため、デフォルトでは有効になっていません。 詳細は、項18.5を参照してください。

template1 以外のデータベースの名前をテンプレートに指定することによってデータベースをコピーすることは可能ですが、これは(まだ) 一般的な目的の "COPY DATABASE" 機能として意図されているわけではありません。 テンプレートとして使用するデータベースは読み取り専用として扱うことを推奨します。 より詳細は項18.3を参照して下さい。

新しいデータベースを作成します。

CREATE DATABASE lusiadas;

代替領域 ~/private_db に新しいデータベースを作成するには、シェルから以下を実行します。

mkdir private_db
initlocation ~/private_db

そして、psqlセッションから以下を実行します。

CREATE DATABASE elsewhere WITH LOCATION '/home/olly/private_db';

互換性

標準SQLには CREATE DATABASE 文はありません。 データベースは、実装で生成が定義されるカタログと同等のものです。