Remove permanentemente uma partição e todos os seus dados de uma tabela particionada. Esta operação é irreversível — os dados excluídos não podem ser recuperados.
Faça backup dos dados da partição antes de executar este comando. Após a exclusão, os dados não podem ser restaurados.
Se você precisar apenas limpar os dados sem remover a definição da partição, use ALTER TABLE TRUNCATE PARTITION. O comando TRUNCATE PARTITION remove todas as linhas da partição, mas mantém a estrutura da partição intacta e não elimina os dados permanentemente como faz o DROP PARTITION.
Sintaxe
ALTER TABLE [schema.]table_name DROP PARTITION partition_name;
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
Exemplo |
|
|
Sim |
Nome da tabela particionada da qual se deseja excluir uma partição |
|
|
|
Sim |
Nome da partição a ser excluída |
|
Observações de uso
Apenas o proprietário da tabela ou um usuário com privilégios pode executar este comando.
Uma tabela particionada deve ter pelo menos uma partição. Não é permitido excluir a última partição restante.
O comando
DROP PARTITIONadquire umAccessExclusiveLockno nível da tabela, que bloqueia todas as operações de Linguagem de Manipulação de Dados (DML) e a maioria das operações de Linguagem de Definição de Dados (DDL) na tabela. Execute este comando fora do horário de pico.
Exemplo
O exemplo a seguir cria uma tabela particionada por intervalo, executa verificações prévias, exclui uma partição e verifica o resultado.
Configurar a tabela de exemplo
Verificações prévias
Excluir a partição
Verificar o resultado
Perguntas frequentes
Por que recebo partition "..." of relation "..." does not exist?
O nome da partição diferencia maiúsculas de minúsculas. Consulte USER_TAB_PARTITIONS para encontrar o nome exato e, se necessário, use aspas duplas para garantir a correspondência exata.
Por que recebo permission denied for table ... ou must be owner of table ...?
O usuário atual não tem permissões suficientes. Alterne para o proprietário da tabela ou para um usuário com privilégios.
Por que recebo cannot drop partition due to dependent objects?
Outros objetos do banco de dados — como restrições de chave estrangeira ou views — dependem desta partição. O comportamento padrão RESTRICT impede a exclusão. Identifique e remova esses objetos dependentes primeiro e tente novamente.
Por que a operação está demorando muito ou parece travada?
O comando DROP PARTITION adquire um AccessExclusiveLock. Se outra transação ativa de longa duração estiver mantendo um lock conflitante, a operação aguardará. Use a consulta a seguir para identificar a sessão bloqueadora pelo seu PID e decida se deve aguardar ou encerrar a transação bloqueadora.
-- Query user information of the blocking thread based on the PID.
SELECT
pid,
usename AS username, -- Database username
application_name, -- Application name (such as JDBC, psql)
client_addr, -- Client IP address
client_hostname, -- Client hostname
client_port, -- Client port
backend_start, -- Time when the connection started
xact_start, -- Time when the transaction started
query_start, -- Time when the current query started
state_change, -- Time when the status last changed
state, -- Status (active, idle, idle in transaction)
wait_event_type, -- Wait event type (such as Lock, IO)
wait_event, -- Specific wait event
query -- Currently running or most recently run SQL statement
FROM
pg_stat_activity
WHERE
pid in 'blocking_pid';
Próximos passos
ALTER TABLE ADD PARTITION: Adiciona uma nova partição a uma tabela particionada.
ALTER TABLE TRUNCATE PARTITION: Limpa todos os dados de uma partição mantendo a definição da partição.
ALTER TABLE SPLIT PARTITION: Divide uma partição em duas.