ALTER TABLE 示例 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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;