CREATE DATABASE

Name

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

Synopsis

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

入力

name

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

dbowner

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

dbpath

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

template

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

encoding

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

出力

CREATE DATABASE

コマンドが問題なく処理された場合に返されるメッセージです。

ERROR: user 'username' is not allowed to create/drop databases

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

ERROR: createdb: database "name" already exists

これは name で指定されたデータベースがすでに存在する場合のエラーです。

ERROR: database path may not contain single quotes

データベースの場所 dbpath に単一引用符が含まれてはいけません。これはデータベースディレクトリを作成するシェルコマンドが問題なく実行できるようにするために要求されるものです。

ERROR: CREATE DATABASE: may not be called in a transaction block

もし稼働中の明示的なトランザクションブロックがある場合CREATE DATABASE は呼び出せません。まずトランザクションを終了させてください。

ERROR: Unable to create database directory 'path'.
ERROR: Could not initialize database directory.

これらはデータディレクトリに対する権限不足、ディスク容量不足、もしくはその他のファイルシステムの問題の可能性があります。データベースサーバを走らせているユーザはその場所へのアクセス権限を持っていなければいけません。

説明

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

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

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

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

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

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

オプションのパラメータは上記で示された順番だけでなく、どのような順番でも書くこともできます。

注釈

CREATE DATABASEPostgreSQL の 言語拡張です。

データベースを削除するには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
   

互換性

SQL92

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