"CREATE TABLE" SQL 09/25/97 日本語PostgreSQL

名称

create table - 新しいクラスを作ります

形式

create table classname (attname type [default value] [not null]
	[, attname type [default value] [not null] [, ...] ] )
	[inherits ( classname [, classname] )]
	[constraint cname check ( test ) [, check ( test ) ] ]
    

説明

create table は現在のデータベースに新しいクラスを入れます。そのクラスはこのコマンドを発行したユーザ "所有" になります。クラスの名前はclassnameに、そして属性はattnameのリストで指定したものになります。作成された各属性はtypeで指定された型となります。各型は単純な型または複合型(セット)または配列型を取ることができます。各属性は非ヌルを指定することができます。また、キーワード default に定数または表現を続けたdefault句で指定したデフォルト値を指定することができます。

各配列属性には配列が保存されます。同じ次元のでなくてはなりませんが、サイズやインデックスの限界が違ってもかまいません。n次元の配列はnペアの鈎括弧を加えて指定します。

att_name type[][]..[]
    
注意。Postgres のバージョン 6.0 の時点で、属性内で矛盾しない次元の配列は強制されていません。これは将来のリリースで変更されるでしょう。

オプションの inherits 句はこのクラスが自動的にすべてのフィールドを継承するクラスの名前を指定します。もし継承したフィールドの名前が一度以上出て来たら、Postgres はエラーを報告します。Postgres は自動的に作成されたクラスが継承の階層の上のクラスの関数を継承することを許可します。関数の継承はCommon Lisp Object System (CLOS) の慣習にしたがって行われます。

新しいクラスclassnameは自動的に型として作られます。ですから、そのクラスからのひとつあるいはそれ以上のインスタンスは自動的にひとつの型となりますので、table(l) や他の create table 文などで使うことができます。この点についてのさらなる検討はpgintro(1) を参照してください。

オプションの constraint 句は新規あるいは更新されたエントリが挿入あるいは更新の作業を成功させるために満たさなくてはならない制約あるいはテストのリストを指定します。各制約は boolean の表現に評価されます。単一の制約から複数の属性を参照できます。

新規のクラスはヒープとして初期データなしで作られます。クラスは 1600 以上の属性を持つことができます(現実的には、これはタプルのサイズが 8192バイト以下でなくてはならないという事実に制約されます)が、この制約をもっと小さく設定しているサイトもあります。クラスはシステムカタログのクラスと同じ名前を持つことができません。

--
-- 属性 name と sal と bdate を持つクラス emp を作ります
--
create table emp (name char16, salary float4, bdate abstime)
    
--
-- 年金情報を持ち emp のフィールドをすべて継承する
-- クラス permemp を作ります
--
create table permemp (plan char16) inherits (emp)
    
--
-- 属性 name と wage をデフォルトの給料と wage の範囲の制約を付けて
-- クラス emppay を作ります
--
create table emppay (name text not null, wage float4 default 10.00)
constraint empcon check (wage > 5.30 and wage <= 30.00), check (name <> '')
    
--
-- 3目並べの盤を 2次元配列として保存するクラス tictactoe を
-- 作ります
--
create table tictactoe (game int4, board char[][])
    
--
-- セット属性 manager を持つクラス newemp を作ります。セット(複合)
-- 属性は定義されるリレーション(ここでは自身)と同じ型、または違う
-- 複合型にもできます。型は pg_type カタログに存在するか、現在
-- 定義されようとしているものでなくてはなりません。
--
create table newemp (name text, manager newemp)
    

参照

table(l) .