ALTERTABLE例子 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

ALTERTABLE例子

下列範例會示範ALTERTABLE指令的基本用法。

重新命名資料表或檢視

以下命令將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;

丟棄資料表限制條件

若要捨棄資料表限制條件,像是主索引鍵、外部索引鍵或唯一限制條件,請先找到限制條件的內部名稱。然後在指ALTERTABLE令中指定約束名稱。下列範例會尋找資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 的壓縮編碼從編碼變更為LZOAZ64編碼。

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;

變更資DISTSTYLEKEYDISTKEY料欄

下列範例顯示如何變更表格DISTKEY的DISTSTYLE和。

使用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。SVVTABLE_ 檢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。SVVTABLE_ 檢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

下列範例顯示如何將表格變更為DISTSTYLEALL。

使用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

下面的例子演示了如何改變一個表ENCODEAUTO。

此範例的資料表定義如下。列c0是用編碼類型定義的AZ64,列c1是用編碼類型定義的LZO。

create table t1(c0 int encode AZ64, c1 varchar encode LZO);

對於此表格,下列陳述式會將AUTO編碼變更為。

alter table t1 alter encode auto;

下列範例顯示如何變更表格以移除ENCODEAUTO設定。

此範例的資料表定義如下。資料表資料欄不需編碼即可定義。在此情況下,編碼預設為ENCODEAUTO。

create table t2(c0 int, c1 varchar);

對於此表格,下列陳述式會將欄 c0 的編碼變更為。LZO表格編碼不再設定為ENCODEAUTO。

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啟,並將表格的組RLSAND合類型設定為:

ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE AND;