CEVIU Logo
Voltar

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

  1. Lançamento do DuckLake v1.0, formato lakehouse nativo em SQL

  2. Lançamento do pg_infer 1.0.0 para inferência de modelos transformer em SQL

  3. PostgreSQL 19 Beta 1 liberado para testes

  4. Microsoft lança pg_durable para workflows duráveis no PostgreSQL

  5. 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

Avalie este artigo:
Compartilhar:
Categoria
CEVIU Dados
Publicado
18 de junho de 2026
Editoria
CEVIU Dados

Quer receber mais sobre CEVIU Dados?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser