ALTER TABLE の例
次の例は、ALTER TABLE コマンドの基本用法を示しています。
テーブルまたはビューの名前の変更
次のコマンドは、USERS テーブルを USERS_BKUP に名前変更します。
alter table users rename to users_bkup;
このタイプのコマンドを使用して、ビューの名前を変更することもできます。
テーブルまたはビューの所有者の変更
次のコマンドは VENUE テーブルの所有者をユーザー DWUSER に変更します。
alter table venue owner to dwuser;
次のコマンドは、ビューを作成した後、その所有者を変更します。
create view vdate as select * from date; alter table vdate owner to vuser;
列名の変更
次のコマンドは VENUE テーブルの列名を VENUESEATS から VENUESIZE に変更します。
alter table venue rename column venueseats to venuesize;
テーブルの制約を削除する
プライマリキー、外部キーまたは一意の制約のようなテーブルの制約を削除するには、まず内部の制約名を見つけます。その後、ALTER TABLE コマンドで制約名を指定します。次の例では、CATEGORY テーブルの制約を見つけてから、category_pkey
という名前のプライマリキーを削除します。
select constraint_name, constraint_type from information_schema.table_constraints where constraint_schema ='public' and table_name = 'category';
constraint_name | constraint_type ----------------+---------------- category_pkey | PRIMARY KEY
alter table category drop constraint category_pkey;
VARCHAR 列の変更
ストレージを節約するため、最初に現在のデータ要件に必要な最小サイズの VARCHAR 列を使用してテーブルを定義することができます。後でより長い文字列を収容するには、テーブルを変更して列のサイズを大きくすることができます。
次の例では、EVENTNAME 列のサイズを VARCHAR(300) に増やします。
alter table event alter column eventname type varchar(300);
列の圧縮エンコードを変更する
列の圧縮エンコードは変更できます。以下に、このアプローチを示す一連の例を示します。これらの例のテーブルは次のように定義されています。
create table t1(c0 int encode lzo, c1 bigint encode zstd, c2 varchar(16) encode lzo, c3 varchar(32) encode zstd);
次のステートメントは、列 c0 の圧縮エンコードを LZO エンコードから AZ64 エンコードに変更します。
alter table t1 alter column c0 encode az64;
次のステートメントは、列 c1 の圧縮エンコードを Zstandard エンコードから AZ64 エンコードに変更します。
alter table t1 alter column c1 encode az64;
次のステートメントは、列 c2 の圧縮エンコードを LZO エンコードからバイトディクショナリエンコードに変更します。
alter table t1 alter column c2 encode bytedict;
次のステートメントは、列 c3 の圧縮エンコードを Zstandard エンコードから Runlength エンコードに変更します。
alter table t1 alter column c3 encode runlength;
DISTSTYLE KEY DISTKEY 列の変更
次の例は、テーブルの DISTSTYLE および DISTKEY を変更する方法を示しています。
EVEN 分散スタイルを指定してテーブルを作成します。SVV_TABLE_INFO ビューは、DISTSTYLE が EVEN であることを示しています。
create table inventory( inv_date_sk int4 not null , inv_item_sk int4 not null , inv_warehouse_sk int4 not null , inv_quantity_on_hand int4 ) diststyle even; Insert into inventory values(1,1,1,1); select "table", "diststyle" from svv_table_info;
table | diststyle -----------+---------------- inventory | EVEN
DISTKEY テーブルを inv_warehouse_sk
に変更してください。SVV_TABLE_INFO ビューは、inv_warehouse_sk
列を結果の分散キーとして示しています。
alter table inventory alter diststyle key distkey inv_warehouse_sk; select "table", "diststyle" from svv_table_info;
table | diststyle -----------+----------------------- inventory | KEY(inv_warehouse_sk)
DISTKEY テーブルを inv_item_sk
に変更してください。SVV_TABLE_INFO ビューは、inv_item_sk
列を結果の分散キーとして示しています。
alter table inventory alter distkey inv_item_sk; select "table", "diststyle" from svv_table_info;
table | diststyle -----------+----------------------- inventory | KEY(inv_item_sk)
テーブルを DISTSTYLE ALL に変更する
次の例では、テーブルを DISTSTYLE ALL に変更する方法を説明します。
EVEN 分散スタイルを指定してテーブルを作成します。SVV_TABLE_INFO ビューは、DISTSTYLE が EVEN であることを示しています。
create table inventory( inv_date_sk int4 not null , inv_item_sk int4 not null , inv_warehouse_sk int4 not null , inv_quantity_on_hand int4 ) diststyle even; Insert into inventory values(1,1,1,1); select "table", "diststyle" from svv_table_info;
table | diststyle -----------+---------------- inventory | EVEN
DISTSTYLE テーブルを ALL に変更します。SVV_TABLE_INFO ビューには、変更された DISTSYTLE が表示されます。
alter table inventory alter diststyle all; select "table", "diststyle" from svv_table_info;
table | diststyle -----------+---------------- inventory | ALL
テーブルの SORTKEY を変更する
複合ソートキーを使用する、あるいはソートキーを使用しないようにテーブルを変更できます。
次のテーブル定義では、テーブル t1
は、インターリーブソートキーを使用するように定義されます。
create table t1 (c0 int, c1 int) interleaved sortkey(c0, c1);
次のコマンドは、インターリーブされたソートキーの使用から複合ソートキーの使用に、テーブルを変更します。
alter table t1 alter sortkey(c0, c1);
次のコマンドは、インターリーブソートキーを削除するためにテーブルを変更します。
alter table t1 alter sortkey none;
次のテーブル定義では、テーブル t1
のソートキーとして c0
列を定義しています。
create table t1 (c0 int, c1 int) sortkey(c0);
次のコマンドは、テーブル t1
を複合ソートキーの使用に変更します。
alter table t1 alter sortkey(c0, c1);
テーブルを ENCODE AUTO に変更する
次の例は、テーブルを ENCODE AUTO に変更する方法を示しています。
例えば、テーブルは次のように定義されています。列 c0
はエンコードタイプ AZ64 で定義され、列 c1
はエンコードタイプ LZO で定義されます。
create table t1(c0 int encode AZ64, c1 varchar encode LZO);
このテーブルの場合、次のステートメントはエンコードを AUTO に変更します。
alter table t1 alter encode auto;
次の例は、テーブルを変更して ENCODE AUTO 設定を削除する方法を示しています。
例えば、テーブルは次のように定義されています。テーブルの列は、エンコードなしで定義されます。この場合、エンコードはデフォルトで ENCODE AUTO になります。
create table t2(c0 int, c1 varchar);
このテーブルの場合、次のステートメントは列 c0 のエンコードを LZO に変更します。テーブルのエンコードが ENCODE AUTO に設定されなくなりました。
alter table t2 alter column c0 encode lzo;;
行レベルのセキュリティコントロールの変更
次のコマンドは、テーブルの RLS をオフにします。
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY OFF;
次のコマンドは、テーブルの RLS をオンにします。
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
次のコマンドは、テーブルの RLS をオンにし、データ共有上でテーブルにアクセスできるようにします。
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON; ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES OFF;
次のコマンドは、テーブルの RLS をオンにして、データ共有上でテーブルにアクセスできなくします。
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON; ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES ON;
次のコマンドは、RLS をオンにし、テーブルの RLS 結合タイプを OR に設定します。
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE OR;
次のコマンドは、RLS をオンにし、テーブルの RLS 結合タイプを AND に設定します。
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE AND;