ALTER TABLE

Name

ALTER TABLE  --  表のプロパティを更新する

Synopsis

ALTER TABLE table
    [ * ] ADD [ COLUMN ] column type
ALTER TABLE table
    [ * ] RENAME [ COLUMN ] column TO newcolumn
ALTER TABLE table
    RENAME TO newtable
  

入力

table

更新対象の、既存の表の名前

column

新規または既存の列の名前

type

新しい列の型

newcolumn

既存の列の新しい名前

newtable

既存の表の新しい名前

出力

ALTER

列または表のリネームの結果返されるメッセージ。

NEW

列の追加の結果返されるメッセージ。

ERROR

表または列が得られなかった場合に返されるメッセージ。

説明

ALTER TABLE は、既存の表の定義を変更します。 新しい列とそれらの型が、CREATE TABLE の同じ様式 および同じ制限で指定されます。 RENAME 句は当該表に含まれるいかなるデータをも変更することなく、 表もしくは列の名前の変更を引き起こします。 したがって、その表または列は、このコマンドが実行された後、同じ 型とサイズで存続します。

表のスキーマを変更するためには、その表を所有して いなければなりません。

注意事項

キーワードCOLUMN はノイズであり、省略可能です。

表の名前に続く"[*]" は、文がその表と 継承階層の中でのその下の全ての表に上書きされること を表します。 PostgreSQL User's Guide に、継承についての 更なる情報があります。

有効な引数の更なる説明は、CREATE TABLE 参照。

使用法

VARCHAR 型の列を表に追加する:

ALTER TABLE distributors ADD COLUMN address VARCHAR(30);
   

既存の列の名前を変える:

ALTER TABLE distributors RENAME COLUMN address TO city;
   

既存の表の名前を変える:

ALTER TABLE distributors RENAME TO suppliers;
   

互換性

SQL92

ALTER TABLE/RENAMEPostgres の言語拡張です。

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;