Exemplos de ALTER TABLE
Os exemplos a seguir demonstram o uso básico de comando ALTER TABLE.
Renomear uma tabela ou visão
O comando a seguir renomeia a tabela de USERS para USERS_BKUP:
alter table users rename to users_bkup;
Você também pode usar esse tipo de comando para renomear uma exibição.
Alterar o proprietário de uma tabela ou visualização
O comando a seguir altera o proprietário da tabela VENUE para o usuário DWUSER:
alter table venue owner to dwuser;
Os comandos a seguir criam uma exibição, depois alteram seu proprietário:
create view vdate as select * from date; alter table vdate owner to vuser;
Renomeação de uma coluna
O comando a seguir renomeia a coluna VENUESEATS na tabela VENUE para VENUESIZE:
alter table venue rename column venueseats to venuesize;
Remover uma restrição de tabela
Para remover uma restrição de tabela, como uma chave primária, chave externa ou restrição exclusiva, primeiro encontre o nome interno da restrição. Depois, especifique o nome da restrição no comando ALTER TABLE. O exemplo a seguir encontra as restrições da tabela CATEGORY, depois remove a chave primária com o nome 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;
Alterar uma coluna VARCHAR
Para poupar armazenamento, você pode definir uma tabela inicialmente com colunas VARCHAR com o tamanho mínimo necessário para os requisitos dos dados atuais. Posteriormente, para acomodar strings mais longas, você poderá alterar a tabela para aumentar o tamanho da coluna.
O exemplo a seguir aumenta o tamanho da coluna EVENTNAME para VARCHAR(300).
alter table event alter column eventname type varchar(300);
Alterar a codificação de compactação para uma coluna
É possível alterar a codificação de compactação de uma coluna. Abaixo, é possível encontrar um conjunto de exemplos demonstrando essa abordagem. A seguir, a definição da tabela para esses exemplos.
create table t1(c0 int encode lzo, c1 bigint encode zstd, c2 varchar(16) encode lzo, c3 varchar(32) encode zstd);
A instrução a seguir altera a codificação de compactação para a coluna c0 de codificação LZO para codificação AZ64.
alter table t1 alter column c0 encode az64;
A instrução a seguir altera a codificação de compactação para a coluna c1 de codificação Zstandard para codificação AZ64.
alter table t1 alter column c1 encode az64;
A instrução a seguir altera a codificação de compactação para a coluna c2 de codificação LZO para codificação Byte-dictionary.
alter table t1 alter column c2 encode bytedict;
A instrução a seguir altera a codificação de compactação para a coluna c3 de codificação Zstandard para codificação Runlength.
alter table t1 alter column c3 encode runlength;
Alterar a coluna DISTSTYLE KEY DISTKEY
Os exemplos a seguir mostram como alterar o DISTSTYLE e DISTKEY de uma tabela.
Crie uma tabela com o estilo de distribuição EVEN. A visualização SVV_TABLE_INFO mostra que o 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
Altere a tabela DISTKEY para inv_warehouse_sk
. A visualização SVV_TABLE_INFO mostra a coluna inv_warehouse_sk
como a chave de distribuição resultante.
alter table inventory alter diststyle key distkey inv_warehouse_sk; select "table", "diststyle" from svv_table_info;
table | diststyle -----------+----------------------- inventory | KEY(inv_warehouse_sk)
Altere a tabela DISTKEY para inv_item_sk
. A visualização SVV_TABLE_INFO mostra a coluna inv_item_sk
como a chave de distribuição resultante.
alter table inventory alter distkey inv_item_sk; select "table", "diststyle" from svv_table_info;
table | diststyle -----------+----------------------- inventory | KEY(inv_item_sk)
Alterar uma tabela para DISTSTYLE ALL
Os exemplos a seguir mostram como alterar uma tabela para DISTSTYLE ALL.
Crie uma tabela com o estilo de distribuição EVEN. A visualização SVV_TABLE_INFO mostra que o 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
Altere a tabela DISTSTYLE para ALL. A visualização SVV_TABLE_INFO mostra a DISTSYTLE alterada.
alter table inventory alter diststyle all; select "table", "diststyle" from svv_table_info;
table | diststyle -----------+---------------- inventory | ALL
Alterar uma tabela SORTKEY
É possível alterar uma tabela para ter uma chave de classificação composta ou nenhuma chave de classificação.
Na definição de tabela a seguir, a tabela t1
é definida com uma chave de classificação intercalada.
create table t1 (c0 int, c1 int) interleaved sortkey(c0, c1);
O comando a seguir altera a tabela de uma chave de classificação intercalada para uma chave de classificação composta.
alter table t1 alter sortkey(c0, c1);
O comando a seguir altera a tabela para remover a chave de classificação intercalada.
alter table t1 alter sortkey none;
Na definição de tabela a seguir, a tabela t1
é definida com coluna c0
como chave de classificação intercalada.
create table t1 (c0 int, c1 int) sortkey(c0);
O comando a seguir altera a tabela t1
para uma chave de classificação composta.
alter table t1 alter sortkey(c0, c1);
Alterar uma tabela para ENCODE AUTO
O exemplo a seguir mostra como alterar uma tabela para ENCODE AUTO.
A seguir, a definição da tabela para esse exemplo. A coluna c0
é definida com o tipo de codificação AZ64 e coluna c1
é definida com o tipo de codificação LZO.
create table t1(c0 int encode AZ64, c1 varchar encode LZO);
Para esta tabela, a instrução a seguir altera a codificação para AUTO.
alter table t1 alter encode auto;
O exemplo a seguir mostra como alterar uma tabela para remover a configuração ENCODE AUTO.
A seguir, a definição da tabela para esse exemplo. As colunas da tabela são definidas sem codificação. Nesse caso, a codificação usa como padrão ENCODE AUTO.
create table t2(c0 int, c1 varchar);
Para esta tabela, a instrução a seguir altera a codificação da coluna c0 para LZO. A codificação da tabela não está mais definida como ENCODE AUTO.
alter table t2 alter column c0 encode lzo;;
Alterar o controle de segurança por linha
O comando a seguir desativa o RLS para a tabela:
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY OFF;
O comando a seguir ativa o RLS para a tabela:
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
O seguinte comando ativa RLS para a tabela e a torna acessível por meio das unidades de compartilhamento de dados:
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON; ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES OFF;
O seguinte comando ativa RLS para a tabela e a torna inacessível por meio das unidades de compartilhamento de dados:
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON; ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES ON;
O seguinte comando ativa RLS e define o tipo de conjunção RLS como OR para a tabela:
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE OR;
O seguinte comando ativa RLS e define o tipo de conjunção RLS como AND para a tabela:
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE AND;