ALTER TABLE ADD および DROP COLUMN の例 - Amazon Redshift

ALTER TABLE ADD および DROP COLUMN の例

次の例は、ALTER TABLE を使用して基本テーブル列を追加した後に削除する方法、および依存オブジェクトがある列を削除する方法を示しています。

基本列の追加と削除

次の例では、スタンドアロンの FEEDBACK_SCORE 列を USERS テーブルに追加します。この列には 1 つの整数が含まれます。この列のデフォルト値は NULL です (フィードバックスコアなし)。

まず、PG_TABLE_DEF カタログテーブルにクエリして、USERS テーブルのスキーマを表示します。

column | type | encoding | distkey | sortkey --------------+------------------------+----------+---------+-------- userid | integer | delta | true | 1 username | character(8) | lzo | false | 0 firstname | character varying(30) | text32k | false | 0 lastname | character varying(30) | text32k | false | 0 city | character varying(30) | text32k | false | 0 state | character(2) | bytedict | false | 0 email | character varying(100) | lzo | false | 0 phone | character(14) | lzo | false | 0 likesports | boolean | none | false | 0 liketheatre | boolean | none | false | 0 likeconcerts | boolean | none | false | 0 likejazz | boolean | none | false | 0 likeclassical | boolean | none | false | 0 likeopera | boolean | none | false | 0 likerock | boolean | none | false | 0 likevegas | boolean | none | false | 0 likebroadway | boolean | none | false | 0 likemusicals | boolean | none | false | 0

次に、feedback_score 列を追加します。

alter table users add column feedback_score int default NULL;

USERS から FEEDBACK_SCORE 列を選択し、追加されたことを確認します。

select feedback_score from users limit 5; feedback_score ---------------- NULL NULL NULL NULL NULL

列を削除して元の DDL に戻します。

alter table users drop column feedback_score;

依存オブジェクトがある列の削除

以下の例では、依存オブジェクトがある列を削除します。その結果、依存オブジェクトも削除されます。

初めに、もう一度 FEEDBACK_SCORE 列を USERS テーブルに追加します。

alter table users add column feedback_score int default NULL;

次に、USERS テーブルから USERS_VIEW というビューを作成します。

create view users_view as select * from users;

次に、USERS テーブルから FEEDBACK_SCORE 列の削除を試みます。この DROP ステートメントではデフォルト動作 (RESTRICT) を使用します。

alter table users drop column feedback_score;

Amazon Redshift は列に別のオブジェクトが依存しているため、列を削除できないことを示すエラーメッセージが表示されます。

今度はすべての依存オブジェクトを削除するため CASCADE を指定して、FEEDBACK_SCORE 列の削除を再度試みます。

alter table users drop column feedback_score cascade;