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 编码更改为 Byte-dictionary 编码。
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;