Pg_kpart 1.0: extensão para evitar varreduras acidentais em tabelas particionadas do PostgreSQL
Aprofundamento CEVIU
Aprofundamento
A pg_kpart 1.0 não é só mais uma extensão de segurança: ela opera no nível do planner do PostgreSQL, usando um planner_hook para inspecionar o plano de execução antes da execução, e rejeitar consultas que não conseguem podar partições. Isso é diferente de triggers ou policies, que atuam *após* a decisão de varredura. O mecanismo é preciso: se o predicado na chave de partição for inutilizável (ex.: função não imutável, comparação com coluna de outra tabela sem join condition adequada), a consulta é barrada com SQLSTATE '54000' (pg_kpart_violation), não com um erro genérico.
O projeto nasce de uma dor real em produção: tabelas particionadas com centenas de milhões de linhas em ambientes de analytics ou time-series, onde um único SELECT sem WHERE na chave pode travar o I/O por minutos. Gilles Darold, mantenedor e CTO da HexaCluster, tem histórico nisso, ele também criou o pgBadger (análise de logs) e o Ora2Pg (migração Oracle → PG). A pg_kpart é compatível com PostgreSQL 13+, mas exige compilação nativa no Linux, não roda em Windows nem macOS, nem em contêineres com glibc mínima sem suporte a pthreads robusto.
O que mudou
A versão 1.0 é a primeira estável, mas a CEVIU já havia coberto o protótipo em rascunho interno da HexaCluster em abril de 2026, então o que mudou foi a estabilidade técnica e a maturidade operacional. Antes, o hook era instável sob carga alta com paralelismo > 4; agora suporta até 16 workers. O modo de auditoria, que antes só logava em stderr, agora grava em tabela pg_kpart.audit_log com timestamp, usuário, query_hash e número de partições afetadas. Também foi adicionado suporte a blacklist por schema + tabela (ex.: public.events_*), algo ausente no beta.
Por que isso importa
Em pipelines de dados, particionamento mal usado é uma das maiores fontes de latência escondida. A pg_kpart fecha uma lacuna entre governança de acesso e governança de desempenho: ela não impede quem *pode* ler, mas garante *como* deve ler. Isso alinha diretamente com práticas de data engineering modernas, como o uso de partition pruning em ETLs incrementais ou em queries de BI com time-based filters. Não é um substituto para boas práticas de modelagem, mas um guardrail que evita que um único erro de código-fonte derrube SLA de todo o data warehouse.
Linha do tempo
Lançamento do DuckLake v1.0, formato lakehouse nativo em SQL
Lançamento do pg_infer 1.0.0 para inferência de modelos transformer em SQL
PostgreSQL 19 Beta 1 liberado para testes
Microsoft lança pg_durable para workflows duráveis no PostgreSQL
pg_kpart 1.0 lançada oficialmente
Perguntas frequentes
A pg_kpart interfere em consultas com JOINs que usam a chave de partição?
Não, desde que o JOIN tenha condição explícita e utilizável na chave (ex.: t1.partition_key = t2.partition_key). Se o planner conseguir podar partições com base nessa condição, a consulta passa. Mas se o JOIN for feito sem essa correlação direta, ou com função não imutável, a pg_kpart rejeita.
Posso usar pg_kpart junto com PostgreSQL 19 Beta 1?
Sim. A extensão foi testada com o PostgreSQL 19 Beta 1 lançado em 4 de junho de 2026. A combinação é útil: o autoscaling de async I/O do PG 19 melhora throughput, mas sem pg_kpart, esse ganho pode ser anulado por uma única varredura acidental em 200 partições.
Como ela se compara ao pg_partman ou ao native partition pruning?
O pg_partman gerencia criação e manutenção de partições. O partition pruning é uma otimização automática do planner, que falha quando faltam condições. A pg_kpart não faz pruning, ela *obriga* o pruning a acontecer, bloqueando o que o planner não consegue otimizar. São ferramentas complementares.
E se minha aplicação precisar de varredura completa mesmo?
Você pode adicionar a tabela à whitelist via pg_kpart.add_whitelist('schema.table'), ou usar o hint /*+ pg_kpart_ignore() */ no comentário da query. Mas isso exige permissão explícita de DBA, e fica registrado no audit_log.
Fontes
- postgresql.orgfonte original
- Categoria
- CEVIU Dados
- Publicado
- 18 de junho de 2026
- Editoria
- CEVIU Dados
