ALTER TABLE table [ * ] ADD [ COLUMN ] column type ALTER TABLE table [ * ] RENAME [ COLUMN ] column TO newcolumn ALTER TABLE table RENAME TO newtable
ALTER TABLE は、既存の表の定義を変更します。 新しい列とそれらの型が、CREATE TABLE の同じ様式 および同じ制限で指定されます。 RENAME 句は当該表に含まれるいかなるデータをも変更することなく、 表もしくは列の名前の変更を引き起こします。 したがって、その表または列は、このコマンドが実行された後、同じ 型とサイズで存続します。
表のスキーマを変更するためには、その表を所有して いなければなりません。
VARCHAR 型の列を表に追加する:
ALTER TABLE distributors ADD COLUMN address VARCHAR(30);
既存の列の名前を変える:
ALTER TABLE distributors RENAME COLUMN address TO city;
既存の表の名前を変える:
ALTER TABLE distributors RENAME TO suppliers;
ALTER TABLE/RENAME は Postgres の言語拡張です。
SQL92 は、Postgres でまだ直接サポート していないALTER TABLE 文に対するいくつかの 付加機能を規定します。
ALTER TABLE table ALTER [ COLUMN ] column SET DEFAULT default ALTER TABLE table ALTER [ COLUMN ] column ADD [ CONSTRAINT >constrain> ] table-constraint
デフォルトの値や制約を表の列の定義に設定します。 default と table-constraint 句の文法については CREATE TABLE を見て下さい。 もしdefault 句が既に存在していると、新しい定義に置き換えられます。 もし何か制約がこの列にすでに存在していると、それらは ブール代数のAND を用いて新しい制約とともに保持されます。
現在、新しいdefault 制約を既存の列に設定するためには、 その表は再作成、リロードされなければなりません。
CREATE TABLE temp AS SELECT * FROM distributors; DROP TABLE distributors; CREATE TABLE distributors ( did DECIMAL(3) DEFAULT 1, name VARCHAR(40) NOT NULL, city VARCHAR(30) ); INSERT INTO distributors SELECT * FROM temp; DROP TABLE temp;
ALTER TABLE table DROP DEFAULT default ALTER TABLE table DROP CONSTRAINT constraint { RESTRICT | CASCADE }
default で設定されたデフォルト値やconstraint で指定された 規則を表の制約から除きます。 もしRESTRICT が指定されたら、この制約に従属したどの制約も伴わない ただ一つの制約が除かれます。 もしCASCADE が指定されたら、この制約に従属したどの制約も 除かれます。
現在、デフォルト値や制約を、既存の列から除くためには、 その表は再作成、リロードされなければなりません。
CREATE TABLE temp AS SELECT * FROM distributors; DROP TABLE distributors; CREATE TABLE distributors AS SELECT * FROM temp; DROP TABLE temp;
ALTER TABLE table DROP [ COLUMN ] column { RESTRICT | CASCADE }
表から列を除きます。 もしRESTRICT が指定されたら、この列に従属したどのオブジェクト も伴わないただ一つの列が除かれます。 もしCASCADE が指定されたら、この列に従属したどのオブジェクトも 除かれます。
現在、既存の列を除くためには、 その表は再作成、リロードされなければなりません。
CREATE TABLE temp AS SELECT did, city FROM distributors; DROP TABLE distributors; CREATE TABLE distributors ( did DECIMAL(3) DEFAULT 1, name VARCHAR(40) NOT NULL, ); INSERT INTO distributors SELECT * FROM temp; DROP TABLE temp;