CREATE DATABASE

Name

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

Synopsis

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

入力

name

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

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 に単一引用符があってはなりません。これはデータベースディレクトリ を作成する shell コマンドが問題なく実行できるようにするために 要求されるものです。

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 は新しい Postgres データベースを 作成します。作成者は新しいデータベースの所有者になります。

例えば別のディスクにデータベースを格納したりするために、 代わりの場所を指定することができます。パスは initlocation で用意しなければいけません。

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

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

もし使用しているサーバがマルチバイトエンコードサポートでコンパイル されている場合、オプションのエンコードパラメータはデータベース エンコードの選択を可能にします。指定されないと、選択された テンプレートデータベースに使われるエンコードがデフォルトに なります。

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

注釈

CREATE DATABASEPostgres の言語拡張です。

データベースを削除するには DROP DATABASE を使います。

プログラム createdb は便宜上提供される、このコマンドの shell スクリプトラッパーです。

これらは絶対パス名で指定される代わりのデータベースの 場所の使用と関連するセキュリティとデータの完全性の問題があり、 デフォルトではバックエンドに認識される環境変数のみが 代わりの場所として指定できます。更に詳しいことは 管理者用ガイドを見て下さい。

template1 以外のデータベースの名前をテンプレートに指定することによって コピーすることは可能ですが、これは(まだ)一般的な目的の COPY DATABASE 機能として意図されているわけではありません。 特に、ソースデータベースが空回り(データ変更トランザクションが 動いていない状態)していることがこのコピー操作の持続には 欠かせません。CREATE DATABASE は操作の開始において(自分以外の)バックエンド プロセスがソースとなるデータベースに接続していないことを確認しますが、 コピーの進行が行なわれている間変更をできないというような保証はしません。 したがって、テンプレートとして 使われるデータベースは読み込みのみとして扱うことをお勧めします。

それぞれのデータベースに便利な二つのフラグが pg_database の中にあります。 datistemplatedatallowconn です。データベースが CREATE DATABASE のテンプレートとして意図されていることを示すために datistemplate を 設定することができます。もしこのフラグが設定されると、 データベースは CREATEDB 権限を持つどのユーザでも複製できます。 これが設定されていないと、スーパーユーザとデータベースの所有者 のみが複写することができます。もし datallowconn が偽の場合、そのデータベースへの新しい接続が許されません (しかし既存のセッションはフラグを偽にするだけでは中断されません)。 template0 データベースは通常このように 変更を防ぐために識別されています。

使用方法

新しいデータベースを作成するには下記のようにします。

olly=> create database lusiadas;
   

デフォルト以外の場所に新しいデータベースを作る方法については管理者 用ガイド「Chapter 6. データベース管理」の「6.1.1. データベースの代 替領域」を御覧下さい。

互換性

SQL92

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