Use a instrução ALTER TABLE para modificar uma tabela particionada no Hologres. Você pode renomear a tabela particionada, anexar uma tabela independente como partição filha ou desanexar uma partição filha existente da tabela pai.
Sintaxe
ALTER TABLE [IF EXISTS] table_name RENAME TO new_table_name;
ALTER TABLE [IF EXISTS] table_name ATTACH PARTITION new_partition_name FOR VALUES IN (<string_literal>);
ALTER TABLE [IF EXISTS] table_name DETACH PARTITION partition_name;
Parâmetros
|
Parâmetro |
Descrição |
|
|
Renomeia a tabela particionada. |
|
|
Anexa uma tabela existente a uma tabela particionada como partição filha. A tabela deve corresponder à política de particionamento e à chave de particionamento da tabela pai. Restrições adicionais se aplicam — consulte Limites. |
|
|
Desanexa uma partição de uma tabela particionada. A partição desanexada torna-se uma tabela independente, sem relação com a tabela pai anterior. |
Limites
Requisitos de colunas
Antes de anexar uma tabela, verifique se ela atende aos seguintes requisitos de colunas:
A tabela deve ter o mesmo número de colunas que a tabela particionada pai.
O tipo de dados de cada coluna deve corresponder ao da coluna equivalente na tabela pai.
A tabela deve satisfazer todas as restrições NOT NULL definidas na tabela pai. Para partições de lista que não aceitam valores NULL, adicione uma restrição NOT NULL à coluna da chave de particionamento, exceto quando a chave primária for uma expressão.
Regras de propriedades ao anexar uma partição filha
Ao anexar uma tabela a uma tabela particionada, o Hologres valida a compatibilidade das propriedades entre a tabela filha e a tabela pai. Se alguma propriedade obrigatória não corresponder, a operação falhará imediatamente e retornará um erro.
Três regras de compatibilidade se aplicam:
Consistência obrigatória: A propriedade da tabela filha deve ser idêntica à da tabela pai. Em caso de divergência, a operação de anexação falhará e você deverá criar uma nova tabela filha com o valor correto da propriedade.
Consistência opcional: A propriedade da tabela filha pode diferir da tabela pai. Se a propriedade não for especificada na tabela filha, esta herdará o valor da tabela pai. Caso seja especificada, o valor definido será mantido.
Inclusão de colunas indexadas da tabela pai: A tabela filha deve indexar todas as colunas indexadas pela tabela pai. Além disso, a tabela filha pode indexar colunas adicionais não indexadas na tabela pai.
A tabela a seguir lista todas as propriedades e as regras aplicáveis ao anexar uma partição filha:
|
Categoria |
Propriedade |
Descrição |
**Herdada por |
Regra ao anexar |
Mantida após desanexar |
|
Propriedade da tabela |
|
Formato de armazenamento da tabela |
Sim |
Consistência obrigatória |
Sim |
|
Propriedade da tabela |
|
Grupo de tabelas ao qual a tabela pertence; também determina a contagem de shards |
Sim |
Consistência obrigatória |
Sim |
|
Propriedade da tabela |
|
Período de tempo de vida (TTL) da tabela |
Sim |
Consistência opcional. Se não especificada na tabela filha, herda da tabela pai. Se especificada, o valor definido é mantido. |
Sim |
|
Índice |
|
Chave primária da tabela |
Sim |
Consistência obrigatória |
Sim |
|
Índice |
|
Chave de distribuição da tabela |
Sim |
Consistência obrigatória |
Sim |
|
Índice |
|
Índice clusterizado: especifica colunas e sua ordem de armazenamento |
Sim |
Consistência obrigatória |
Sim |
|
Índice |
|
Chave de segmento da tabela |
Sim |
Consistência obrigatória |
Sim |
|
Índice |
|
Índices bitmap da tabela |
Sim |
Deve incluir colunas indexadas da tabela pai |
Sim |
|
Índice |
|
Colunas codificadas por dicionário da tabela |
Sim |
Deve incluir colunas indexadas da tabela pai |
Sim |
|
Índice |
|
Indica se o log binário está ativado |
Sim |
Consistência obrigatória |
Sim |
|
Índice |
|
Índices vetoriais da tabela |
Sim |
Deve incluir colunas indexadas da tabela pai |
Sim |
|
Restrição de coluna |
|
Restrição NOT NULL |
Sim |
Consistência obrigatória |
Sim |
|
Restrição de coluna |
|
Restrição de valor padrão |
Sim |
Consistência obrigatória |
Sim |
Exemplos
Operações básicas
Os exemplos a seguir demonstram como renomear uma tabela particionada, anexar uma partição e desanexar uma partição.
-- Rename a partitioned table.
alter table holo_test rename to my_holo_test;
-- Attach the table named my_table as a partition of the table named holo_table.
alter table holo_table attach partition my_table for values in ('2015');
-- Detach the child partitioned table holo_test from the parent partitioned table all_test.
alter table all_test detach partition holo_test;
Substituir uma partição filha existente
Use uma transação para substituir atomicamente uma partição filha existente por novos dados. Esse padrão desanexa a partição antiga, renomeia-a como backup, renomeia a nova tabela para ocupar seu lugar e, em seguida, anexa a nova partição — tudo dentro de um único bloco de transação.
Etapa 1: Criar e popular a tabela de substituição.
-- Create a temporary table.
begin;
drop table if exists "table_20210101_new";
CREATE TABLE "table_20210101_new" (
"colA" integer NOT NULL,
"colB" text NOT NULL,
"colC" numeric(38,10) NOT NULL,
"ds" text NOT NULL,
"process_time" timestamptz NOT NULL DEFAULT now()
);
call set_table_property('table_20210101_new', 'orientation','column');
call set_table_property('table_20210101_new', 'distribution_key','"colA"');
call set_table_property('table_20210101_new', 'event_time_column','process_time');
commit;
--- Import data to the temporary table.
insert into "table_20210101_new" select * from ...;
Etapa 2: Trocar a partição antiga pela nova.
--- Replace an existing child partitioned table with the temporary table.
begin;
-- Detach an existing child partitioned table from the parent partitioned table and make the child partitioned table an independent table.
ALTER TABLE table_parent DETACH PARTITION table_20210101;
-- Rename the independent table.
ALTER TABLE table_20210101 RENAME to table_20210101_backup;
-- Rename the temporary table as the original child partitioned table.
ALTER TABLE table_20210101_new RENAME to table_20210101;
-- Attach the new child partitioned table to the parent partitioned table.
ALTER TABLE table_parent ATTACH PARTITION table_20210101 FOR VALUES in ("20210101");
commit;