無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

CREATE DATABASE

名前

CREATE DATABASE -- 新しいデータベースを作成する

概要

CREATE DATABASE 

name


    [ [ WITH ] [ OWNER [=] 

user_name

 ]
           [ TEMPLATE [=] 

template

 ]
           [ ENCODING [=] 

encoding

 ]
           [ LC_COLLATE [=] 

lc_collate

 ]
           [ LC_CTYPE [=] 

lc_ctype

 ]
           [ TABLESPACE [=] 

tablespace_name

 ]
           [ CONNECTION LIMIT [=] 

connlimit

 ] ]

説明

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

データベースを作成するには、スーパーユーザ、もしくは CREATEDB という特別な権限を持つユーザである必要があります。 CREATE USER を参照してください。

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

パラメータ

name

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

user_name

新しいデータベースを所有するユーザのロール名です。 デフォルト設定(つまり、コマンドを実行したユーザ)を使用する場合は DEFAULT と指定します。 他のロールによって所有されるデータベースを作成するためには、そのロールの直接的または間接的なメンバであるか、スーパーユーザでなければなりません。

template

新しいデータベースを作成元となるテンプレートの名前です。 デフォルトテンプレート( template1 )を使う場合は、 DEFAULT と指定します。

encoding

新しいデータベースで使われる文字セット符号化方式です。 文字列定数(例えば 'SQL_ASCII' )、整数の符号化方式番号、デフォルトの符号化方式(すなわちテンプレートデータベースの符号化方式)を使う DEFAULT のいずれかを指定します。 PostgreSQL サーバでサポートされる文字セットについては 項22.3.1 で説明します。 この他の制限については後述します。

lc_collate

新しいデータベースで使用する照合順( LC_COLLATE )です。 これは、たとえばORDER BYを持つ問い合わせなどにおいて文字列に適用されるソート順やテキスト型の列に対するインデックスで使用される順序に影響します。

lc_ctype

新しいデータベースで使用する文字のクラス( LC_CTYPE )です。 これは、たとえば小文字、大文字、数字といった文字の分類に影響します。 デフォルトではテンプレートデータベースの文字クラスを使用します。 さらなる制限に関しては後で説明します。

tablespace_name

新しいデータベースに関連付けされるデフォルトのテーブル空間名です。テンプレートデータベースのテーブル空間を使用する場合は、 DEFAULT と指定します。 このテーブル空間が、このデータベースで作成されるオブジェクトのデフォルトのテーブル空間となります。 詳細は CREATE TABLESPACE を参照してください。

connlimit

このデータベースで確立できる同時接続数です。 -1(デフォルト)は無制限を意味します。

省略可能なパラメータは、任意の順番で記述できます。上記の順番で記述しなくても構いません。

注釈

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

ほとんどの場合、 "could not initialize database directory" という行が含まれるエラーは、データディレクトリの権限不足、ディスク容量不足などファイルシステムについての問題に関連するものです。

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

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

template1 以外のデータベースの名前をテンプレートに指定してデータベースをコピーすることは可能ですが、これは(まだ)一般的に使用する " COPY DATABASE " 機能として意図されているわけではありません。 主な制限は、コピー中に他のセッションからテンプレートデータベースへの接続ができないことです。 CREATE DATABASE は、開始した時に他の接続があると失敗します。 テンプレートデータベースへの新規接続は CREATE DATABASE が完了するまでロックされます。 詳細は 項21.3 を参照してください。

新しいデータベース用に指定される文字セット符号化方式は選択されたロケール設定( LC_COLLATE および LC_CTYPE )と互換性がなければなりません。 ロケールが C (や同等の POSIX )であれば、すべての符号化方式が許されますが、他のロケール設定では適切に動作する符号化方式は1つしかありません。 (しかしWindowsではUTF-8符号化方式をすべてのロケールで使用することができます。) CREATE DATABASE では、ロケール設定に関係なくスーパーユーザが SQL_ASCII 符号化方式を指定することを許していますが、こうした選択は廃止予定であり、データベース内にロケールと互換性がない符号化方式でデータが格納された場合、文字列関数の誤動作を多く引き起こします。

符号化方式とロケール設定はテンプレートデータベースのこれらの設定と一致しなければなりません。 ただしtemplate0がテンプレートとして使用される場合は例外です。 他のデータベースには指定された符号化方式と一致しないデータを含む可能性や LC_COLLATE および LC_CTYPE がソート順序に影響するようなインデックスを含む可能性があることがこの理由です。 こうしたデータをコピーすると、新しい設定から見るとデータベースが破損する結果となります。 しかし template0 には影響を受けるデータやインデックスが含まれていないことが分かっています。

CONNECTION LIMIT は厳密な制限ではありません。 データベース向けの接続 "スロット" が1つ残っていた時に同時に2つの新しいセッション開始要求があった場合、両方とも失敗する可能性があります。 また、この制限はスーパーユーザには強制されません。

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

CREATE DATABASE lusiadas;

salesapp ユーザを所有者、 salesspace をデフォルトのテーブル空間として sales データベースを作成します。

CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;

ISO-8859-1文字セットをサポートする music データベースを作成します。

CREATE DATABASE music ENCODING 'LATIN1' TEMPLATE template0;

この例における TEMPLATE template0 句は、 template1 の符号化方式がISO-8859-1ではない場合にのみ必要です。 符号化方式を変更するには同様に LC_COLLATE LC_CTYPE を新たに設定する必要があるかもしれないことに注意してください。

互換性

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

関連項目

ALTER DATABASE , DROP DATABASE

powered by SEO.CUG.NET