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 拡張です。