Exemplos de ALTER TABLE - Amazon Redshift

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;