CREATE DATABASE name [ [ WITH ] [ OWNER [=] dbowner ] [ LOCATION [=] 'dbpath' ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] ]
作成するデータベースの名前です。
新しいデータベースを所有するデータベースユーザの名前です。もしくは、デフォルト設定 (つまり、コマンドを実行したユーザ) を使用するには、DEFAULT とします。
新しいデータベースを格納するためのファイルシステムの代わりの場所で、文字列リテラルとして指定されます。 もしくはデフォルトの場所を使う場合はDEFAULTです。
新しいデータベースを作成するテンプレートの名前、もしくはデフォルトテンプレート(template1)を使うDEFAULTです。
新しいデータベースで使うためのマルチバイト符号化方式です。文字列リテラル名(たとえば'SQL_ASCII')、もしくは整数の符号化番号、もしくはデフォルトの符号化方式を使う DEFAULT です。
コマンドが問題なく処理された場合に返されるメッセージです。
データベースを作成するには、特別な CREATEDB 権限が必要です。CREATE USERを参照してください。
これは name で指定されたデータベースがすでに存在する場合のエラーです。
データベースの場所 dbpath に単一引用符が含まれてはいけません。これはデータベースディレクトリを作成するシェルコマンドが問題なく実行できるようにするために要求されるものです。
もし稼働中の明示的なトランザクションブロックがある場合CREATE DATABASE は呼び出せません。まずトランザクションを終了させてください。
これらはデータディレクトリに対する権限不足、ディスク容量不足、もしくはその他のファイルシステムの問題の可能性があります。データベースサーバを走らせているユーザはその場所へのアクセス権限を持っていなければいけません。
CREATE DATABASEは新しい PostgreSQLデータベースを作成します。
通常、データベースの作成者がその新しいデータベースの所有者になります。 スーパーユーザは、OWNER 句を使用することにより、他のユーザを所有者とするデータベースを作成できます。 スーパーユーザは、特別な権限を保持していなくても、他のユーザを所有者とするデータベースを作成できます。 スーパーユーザではない CREATEDB 権限を保持するユーザは、自分自身が所有するデータベースのみ作成できます。
たとえば別のディスクにデータベースを格納したりするために、代わりの場所を指定することができます。そのパスは initlocation コマンドであらかじめ用意しておく必要があります。
もしパス名がスラッシュ(/)を含まない場合、環境変数名として解釈されます。 この環境変数はサーバプロセスに知らせなければなりません。 この方法でデータベース管理者はデータベースを作ることができる場所を管理することができます(慣習的な選択例は PGDATA2 です)。もしサーバがALLOW_ABSOLUTE_DBPATHSでコンパイルされている場合(デフォルトではそうではありません)、スラッシュで始まることで識別される絶対パス名(たとえば、/usr/local/pgsql/data)も使用することができます。
デフォルトでは、新しいデータベースは標準システムデータベース template1 を複製することによって作成されます。別のテンプレートは TEMPLATE =name と書くことで指定できます。特に、TEMPLATE = template0と書くことで、使用している PostgreSQL のバージョンによって定義済みの標準オブジェクトのみを持つ新しいデータベースを作ることができます。これは、もし template1 に追加された、独自にインストールしたオブジェクトのコピーを避けたいという場合に便利です。
もし使用しているサーバがマルチバイト符号化をサポートするようにコンパイルされている場合、オプションの符合化方式パラメータを使用してデータベース符合化方式を選択することができます。指定されないと、選択されたテンプレートデータベースで使われる符合化方式がデフォルトになります。
オプションのパラメータは上記で示された順番だけでなく、どのような順番でも書くこともできます。
CREATE DATABASE は PostgreSQL の 言語拡張です。
データベースを削除するにはDROP DATABASEを使用して下さい。
createdb プログラムは利便性のために提供される、このコマンドのシェルスクリプトラッパです。
絶対パス名による代わりのデータベースの場所の指定を使用することには、セキュリティとデータの整合性の問題がありますので、デフォルトではバックエンドに認識される環境変数のみが代わりの場所として指定できます。より詳細は管理者用ガイドを参照してください。
template1 以外のデータベースの名前をテンプレートに指定することによってデータベースをコピーすることは可能ですが、これは(まだ) 一般的な目的の COPY DATABESE 機能として意図されているわけではありません。テンプレートとして使用するデータベースは読み取り専用として扱うことを推奨します。より詳細は 管理者用ガイド を参照して下さい。
新しいデータベースを作成するには以下のようにします。
olly=> create database lusiadas;
別の領域 ~/private_db に新しいデータベースを作成するには以下のようにします。
$ mkdir private_db $ initlocation ~/private_db The location will be initialized with username "olly". This user will own all the files and must also own the server process. Creating directory /home/olly/private_db Creating directory /home/olly/private_db/base initlocation is complete. $ psql olly Welcome to psql, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit olly=> CREATE DATABASE elsewhere WITH LOCATION = '/home/olly/private_db'; CREATE DATABASE