alter table - クラスに属性を追加したり、属性またはクラスの名前を変える
alter table クラス名 [ * ]
add [ column ] 属性名 型
alter table クラス名 [ * ]
add ( 属性名 型 )
alter table クラス名1
rename to クラス名2
alter table クラス名1 [*]
rename [ column ] 属性名1 to 属性名2
alter table コマンドは、存在するクラスクラス名 への新しい属性の追加や、クラスや属性の名前の変更を、影響を受けるクラスに含まれるデータをいっさい変更することなく行うことができる。そのため、このコマンドが実行された後も、元々あったクラスや属性については同じ型やサイズで残される。
新しい属性とそれらの型は同じスタイルで指定され、table(l) で定義したものと同じ制限が適用される。
継承を伴う階層構造全体の各クラスに対してある属性を追加するには、スーパークラスのクラス名を使い、"*" を追加する(デフォルトでは、いかなるサブクラスにも追加されない)。これは、スーパークラスへ属性を追加する際には 常に 行わなければならない。これを怠ると、
のような継承を伴う階層構造への問い合わせは動作しない。これは、スーパークラスで見つかった属性がサブクラスにはないためである。
select * from super* s
効率に関する理由により、追加された属性に対するデフォルト値は、クラスの存在するインスタンスにおいて置き換えは行われない。すなわち、存在するインスタンスでは、新しい属性は必ず NULLの値を持つ。もし NULL でない値を入れたい場合は、続いてupdate(l) (query)を実行すれば良い。
クラスやそのスキーマの名前を変えるには、あなたはその変更するクラスの所有者でなければならない。システムカタログに属するスキーマのいかなる部分も、変更することは禁止されている。
クラスのスキーマを変更するためには、あなたはその変更するクラスの所有者でなければならない。
--
-- 従業員クラスに雇用開始日を追加する
--
alter table 従業員 add column 雇用開始日 abstime
--
-- すべての人物(従業員、学生などを含む)に、
-- 健康管理番号を追加する
--
alter table 人物 * add column 健康管理番号 int4
--
-- 従業員クラスを個人に変更する
--
alter table 従業員 rename to 個人
--
-- スポーツ属性を趣味に変更する
--
alter table 従業員 rename column スポーツ to 趣味
--
-- 従属する属性に変更を加える
--
alter table 人物 * rename column 姓 to 家族名
堀田 倫英 <hotta@net-newbie.com>