ALTER TABLE

Name

ALTER TABLE  --  テーブルのプロパティの更新

Synopsis

ALTER TABLE [ ONLY ] table [ * ]
    ADD [ COLUMN ] column type
ALTER TABLE [ ONLY ] table [ * ]
    ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAULT }
ALTER TABLE table [ * ]
    RENAME [ COLUMN ] column TO newcolumn
ALTER TABLE table
    RENAME TO newtable
ALTER TABLE table
    ADD table constraint definition
ALTER TABLE table
	OWNER TO new owner 
  

入力

table

更新対象の既存のテーブルの名前です。

column

新規または既存の列の名前です。

type

新しい列の型です。

newcolumn

既存の列の新しい名前です。

newtable

テーブルの新しい名前です。

table constraint definition

テーブルの新しいテーブル制約です。

New user

テーブルの新しい所有者のユーザ名です。

出力

ALTER

列名またはテーブル名が更新されたとき返されるメッセージです。

ERROR

テーブルまたは列が有効でない場合に返されるメッセージです。

説明

ALTER TABLE は既存のテーブルの定義を変更します。 ADD COLUMN 書式は CREATE TABLE と同じ構文を使って新しい列をテーブルに 追加します。ALTER COLUMN 書式で 列のデフォルトを設定または解除することができます。デフォルトは新しく 挿入された行にのみ適用されることに注意してください。 RENAME 句を使用して対象とするテーブルに含まれるデータまったく 変更することなく、 テーブルもしくは列の名前を変更することができます。したがって、その テーブルまたは列は、このコマンドが実行された後でも同じ型とサイズのままです。 ADD table constraint definition 句は CREATE TABLE と同じ構文を使ってテーブルに新しい制約を追加します。OWNER 句は テーブルの所有者を new user に変えます。

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

注釈

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

現在の実装では、新しい列のデフォルトと制約句は無視されます。 ALTER TABLESET DEFAULT 句を使って後でデフォルトを設定することができます。 (UPDATEを使って 既存の行も新しいデフォルト値に更新しなければなりません。)

現在の実装では、FOREIGN KEY 制約のみテーブルに追加されることが できます。一意な制約を作成または削除するためには一意なインデックス を作成します。(CREATE INDEX を見て下さい。)検査制約 を追加するには、CREATE TABLEコマンドの別のパラメータを使って テーブルを再作成し再ロードする必要があります。

テーブルを変更するためにはそのテーブルを所有していなければ なりません。システムカタログのスキーマのいかなる部分の名前 変更をすることは許可されていません。 PostgreSQL ユーザズガイド に 継承に関する更に詳しい情報があります。

有効な引数の詳しい説明は 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;
   

下記は外部キー制約をテーブルに追加します。

ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses(address) MATCH FULL;
   

互換性

SQL92

ADD COLUMN 書式は、上記で説明された ようにデフォルトと制約をサポートしないという例外はありますが 規則に従っています。ALTER COLUMN 書式は 完全にルール通りです。

SQL92 は、まだ Postgres に直接サポートされていない ALTER TABLE 文にいくつかの機能追加を指定しています。

ALTER TABLE table DROP CONSTRAINT constraint { RESTRICT | CASCADE }
      

テーブル制約(検査制約、一異性制約、もしくは外部キー制約など) を削除します。一意性制約を削除するためには、一意 インデックスを削除します。他の種類の制約を削除するには、 CREATE TABLE コマンドの別のパラメータを使ってテーブルを再作成し再ロード する必要があります。

例えば、テーブル distributors の 制約を削除するためには下記のようにします。

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 }
      

テーブルから列を削除します。現在では、既存の列を削除するためには テーブルを再作成してから再ロードしなくてはなりません。

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;
       

列とテーブルの名前を変更する句は SQL92 からの Postgres の拡張です。