PostgreSQL 19 e o REPACK (CONCURRENTLY): Análise dos Custos Operacionais
Aprofundamento CEVIU
Aprofundamento
O REPACK (CONCURRENTLY) no PostgreSQL 19 revoluciona a reescrita de tabelas. Ele centraliza as funcionalidades de VACUUM FULL e CLUSTER, permitindo a operação online. A ferramenta usa o mecanismo de decodificação lógica, o mesmo da replicação. Ela cria um slot temporário de replicação para tirar um snapshot. Todas as mudanças na tabela durante a cópia são coletadas do WAL por um worker em segundo plano. Depois de copiar as linhas visíveis do snapshot para um novo arquivo e reconstruir os índices, o REPACK aplica essas mudanças acumuladas.
A fase final exige um bloqueio ACCESS EXCLUSIVE breve para aplicar as últimas alterações e trocar os arquivos. Esta é a única interrupção para escrita. É crucial notar que o REPACK (CONCURRENTLY) não é MVCC-safe. Transações REPEATABLE READ longas podem ver uma tabela vazia se o REPACK terminar antes de elas lerem. Outro ponto crítico é o limite de cerca de 105 milhões de atualizações ou exclusões durante a execução. Ultrapassar isso causa falha e pode levar a um OOM kill, derrubando o banco de dados.
O que mudou
A grande novidade é que o que antes dependia de extensões externas como pg_repack ou pg_squeeze agora está integrado ao PostgreSQL. A notícia atual detalha que o REPACK (CONCURRENTLY) é uma funcionalidade nativa do PostgreSQL 19. Isso significa menor dependência de componentes externos e maior facilidade de uso, especialmente em serviços gerenciados. A cobertura anterior do CEVIU sobre o PostgreSQL 19, como a de 20 de agosto de 2026, já apontava para um foco em otimizações e melhorias de desempenho. Esta nova funcionalidade é uma entrega concreta dessas promessas de performance, oferecendo uma forma mais otimizada e eficiente de lidar com o inchaço de tabelas.
Por que isso importa
Para desenvolvedores e DBAs, a chegada do REPACK (CONCURRENTLY) no PostgreSQL 19 é um passo importante na gestão de bancos de dados. A ferramenta simplifica a manutenção de tabelas online, eliminando a necessidade de extensões e seus pré-requisitos, como o shared_preload_libraries. Isso a torna acessível em ambientes onde extensões são restritas. Contudo, a análise dos custos operacionais mostra que esta otimização não vem sem contrapartidas. Impactos no VACUUM global, um breve bloqueio de escritas e o limite de 105 milhões de mudanças exigem um planejamento cuidadoso para garantir que a funcionalidade seja utilizada de forma eficiente e segura, sem comprometer a estabilidade do sistema.
Linha do tempo
PostgreSQL 19 Beta 1 está disponível para testes
Postgres 19 Aprimora Compressão de Dados com Migração para LZ4
Postgres 19 Chega com Foco na Otimização e Melhorias de Desempenho
PostgreSQL 19: Consistência de Leitura em Réplicas com 'WAIT FOR LSN' Promete Revolucionar Aplicações Distribuídas
PostgreSQL 19 Beta 3 Chega com SQL Temporal e Otimizações de DDL
PostgreSQL 19 Inova com Guia de Planos de Execução para Otimização de Queries
PostgreSQL 19 e o REPACK (CONCURRENTLY): Análise dos Custos Operacionais
Perguntas frequentes
O que é REPACK (CONCURRENTLY) no PostgreSQL 19?
É uma funcionalidade nativa do PostgreSQL 19 que permite a reescrita de tabelas online para otimizar o espaço e o desempenho. Ela combina as operações de VACUUM FULL e CLUSTER, mas permite que a tabela seja acessada durante a maior parte do processo. A ferramenta utiliza decodificação lógica para rastrear mudanças, minimizando o tempo de inatividade.
Quais as principais vantagens em relação a ferramentas anteriores como pg_repack e pg_squeeze?
A principal vantagem é a integração nativa ao PostgreSQL 19, eliminando a necessidade de extensões externas e shared_preload_libraries. Isso permite seu uso em serviços gerenciados e geralmente resulta em menor geração de WAL comparado ao pg_repack. Além disso, a implementação é otimizada para a arquitetura interna do banco de dados.
Quais são as limitações e custos operacionais do REPACK (CONCURRENTLY)?
Ele pode impactar o VACUUM global, pois impede a remoção de versões de linha antigas. Há um breve bloqueio de escritas na fase final da operação para a troca de arquivos. Atualmente, existe uma limitação de aproximadamente 105 milhões de atualizações ou exclusões por execução. Atingir esse limite pode causar a falha da operação e até um OOM kill do servidor.
Por que o REPACK (CONCURRENTLY) não é MVCC-safe?
Durante a reescrita, o REPACK cria uma nova versão da tabela. Transações que usam isolamento REPEATABLE READ e que foram iniciadas antes da conclusão do REPACK podem, ao tentar ler a tabela após a operação, não encontrar nenhuma linha ou ter uma visão inconsistente. Isso acontece porque o novo conjunto de dados pode ser considerado 'no futuro' pela snapshot antiga da transação.
Fontes
- boringsql.comfonte original
- Categoria
- CEVIU Dados
- Publicado
- 28 de setembro de 2026
- Editoria
- CEVIU Dados

