他のバージョンの文書11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

ALTER TABLE

Name

ALTER TABLE  --  テーブル定義を変更します。

Synopsis

ALTER TABLE [ ONLY ] table [ * ]
    ADD [ COLUMN ] column type [ column_constraint [ ... ] ]
ALTER TABLE [ ONLY ] table [ * ]
    ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAULT }
ALTER TABLE [ ONLY ] table [ * ]
    ALTER [ COLUMN ] column SET STATISTICS integer
ALTER TABLE [ ONLY ] table [ * ]
    RENAME [ COLUMN ] column TO newcolumn
ALTER TABLE table
    RENAME TO new_table
ALTER TABLE table
    ADD table_constraint_definition
ALTER TABLE [ ONLY ] table 
	DROP CONSTRAINT constraint { RESTRICT | CASCADE }
ALTER TABLE table
	OWNER TO new_owner 

入力

table

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

column

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

type

新しい列の型です。

newcolumn

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

new_table

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

table_constraint_definition

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

new_owner

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

出力

ALTER

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

ERROR

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

説明

ALTER TABLE は既存のテーブルの定義を変更します。 ADD COLUMN 形式は CREATE TABLE と同じ構文を使って新しい列をテーブルに追加します。 ALTER COLUMN SET/DROP DEFAULT 形式を使用して、列のデフォルトを設定または解除することができます。デフォルトはこの変更後に行なわれる INSERT コマンドのみに適用されることに注意してください。テーブル内の既存の行は変更されません。 ALTER COLUMN SET STATISTICS 形式を使用して、この変更後に行なわれる ANALYZE 操作における統計情報収集対象を設定することができます。 RENAME 句を使用して対象とするテーブルに含まれるデータをまったく変更することなく、テーブル、列、インデックス、シーケンスの名前を変更することができます。そのデータは、このコマンドが実行された後でも同じ型とサイズのままです。ADD table_constraint_definition 句は、CREATE TABLE と同じ構文を使ってテーブルに新しい制約を追加します。DROP CONSTRAINT constraint 句はテーブル(およびその子テーブル)上の、 constraint に一致する制約を削除します。OWNER 句はテーブルの所有者を new userに変更します。

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

注釈

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

現在の ADD COLUMN の実装では、新しい列のデフォルトと NOT NULL 句はサポートされません。ALTER TABLESET DEFAULT 形式を使って後でデフォルトを設定することができます(また、既存の行を新しいデフォルト値に更新したい場合は UPDATE を使用して下さい)。

依存関係の検査はまだ行なわれませんが、DROP CONSTRAINT では、RESTRICT が必須です。CASCADE オプションはサポートされていません。現在の DROP CONSTRAINT は CHECK 制約のみを削除します。PRIMARY もしくは UNIQUE 制約を削除するには、 DROP INDEX を使用して対応するインデックスを削除して下さい。FOREIGN KEY 制約を削除するには、CREATE TABLE コマンドに異なるパラメータを指定して、テーブルを再作成し、再ロードする必要があります。

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

CREATE TABLE temp AS SELECT * FROM distributors;
DROP TABLE distributors;
CREATE TABLE distributors AS SELECT * FROM temp;
DROP TABLE temp;

テーブルを変更するためにはそのテーブルを所有していなければいけません。システムカタログのスキーマのいかなる部分も変更することは許可されていません。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;

テーブルに CHECK 制約を追加するには、以下のようにします。

ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5);

テーブルとその子テーブルから CHECK 制約を削除するには、以下のようにします。

ALTER TABLE distributors DROP CONSTRAINT zipchk RESTRICT;

外部キー制約をテーブルに追加するには、以下のようにします。

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

テーブルに(複数列の)一意性制約を追加するには、以下のようにします。

ALTER TABLE distributors ADD CONSTRAINT dist_id_zipcode_key UNIQUE (dist_id, zipcode);

自動的に命名されるプライマリキー制約をテーブルに追加します。テーブルは 1 つのみのプライマリキーしか持つことができない点には注意して下さい。

ALTER TABLE distributors ADD PRIMARY KEY (dist_id);

互換性

SQL92

ADD COLUMN 形式は、上述のようにデフォルトと NOT NULL 制約をサポートしないという例外はありますが、規則に従っています。 ALTER COLUMN 形式は完全に規則どおりです。

SQL92では、以下のような、まだ PostgreSQL に直接サポートされていない ALTER TABLE 文の追加機能が指定されています。

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 からの PostgreSQL の拡張です。