- A versão beta traz
REPACK CONCURRENTLYintegrado ao core para grandes bancos de dados de produção, além de melhorias amplas em consultas de grafo por SQL, replicação lógica, VACUUM, desempenho e muito mais - Suporte a mesclagem e divisão de partições e sincronização de valores de sequência tornam mudanças de design e movimentação de dados em produção bem mais fáceis
- O autovacuum passa a contar com workers paralelos e um sistema de pontuação por prioridade, melhorando a vazão e a visibilidade das tarefas de manutenção
- Com a introdução de SQL/PGQ, passa a ser possível consultar dados existentes em formato de grafo sem abandonar o modelo relacional
- O ponto principal não é um recurso isolado, mas a amplitude (breadth): avanços simultâneos em aplicações, operações, desempenho e escalabilidade
REPACK integrado por padrão
- Em ambientes operacionais de longa duração, é recorrente a necessidade de recuperar bloat de tabelas, reescrever tabelas e reorganizar dados sem os locks normalmente associados a
VACUUM FULLouCLUSTER- Já existia um ecossistema de extensões para resolver esse problema, com
pg_repackcomo principal destaque
- Já existia um ecossistema de extensões para resolver esse problema, com
- O Postgres 19 incorpora o comando
REPACKao core, incluindo suporte aREPACK CONCURRENTLY- Espera-se que esse seja um recurso mais valorizado por usuários de produção do que o leitor médio de release notes imaginaria
Particionamento mais prático
- O Postgres 19 adiciona suporte a mesclagem e divisão de partições
- Estratégias de particionamento são escolhidas com informações incompletas, e quando carga de trabalho, retenção ou ritmo de crescimento de dados mudam, algumas partições podem ficar grandes demais ou pequenas demais
- Com divisão e mesclagem, passa a ser possível evoluir o design ao longo do tempo sem precisar reconstruir tudo do zero
- Exemplo de mesclar partições Q1 e Q2 em uma única partição:
ALTER TABLE customer_orders MERGE PARTITIONS (orders_2026_q1, orders_2026_q2) INTO orders_2026_h1; - Também é apresentado um exemplo de
SPLIT PARTITIONpara dividir a partição de Q3 por mês
- Exemplo de mesclar partições Q1 e Q2 em uma única partição:
Replicação lógica mais madura
- A replicação lógica é útil para migração, upgrade, sistemas de reporting, movimentação de dados, replicação seletiva e fluxos operacionais de alta disponibilidade
- A maior melhoria é a sincronização de valores de sequência, permitindo que o assinante permaneça mais alinhado ao publicador
- Sem replicar o estado da sequência, os dados são movidos, mas após o cutover podem surgir problemas porque o próximo ID gerado fica desalinhado
- A publicação ganha suporte a
ALL SEQUENCES, relatórios de erro de sincronização de sequência e melhorias no comportamento de atualização de assinaturas relacionadas a sequências
- Agora é possível publicar todas as tabelas e excluir algumas com a cláusula
EXCEPT - Quando necessário,
wal_level = replicaativa automaticamente a replicação lógica, e o novoeffective_wal_levelmostra o comportamento real, reduzindo erros de configuração e aumentando a visibilidade
Autovacuum mais inteligente e mais visível
- O autovacuum pode usar workers de vacuum paralelos, com controle global e por tabela
- Exemplo de configuração global:
ALTER SYSTEM SET autovacuum_max_parallel_workers = 4;
- Exemplo de configuração global:
- Um novo sistema de pontuação controla a ordem em que as tabelas são vacuumadas, melhorando a priorização das mais urgentes
- Exemplo de ajuste por tabela: urgência 3.0 para vacuum baseado em inserts e urgência 0.5 para vacuum normal de update/delete
- A nova view
pg_stat_autovacuum_scoresdá visibilidade ao processo de decisão- Mais detalhes nas views de progresso de vacuum e analyze, uso de memória e paralelismo em
VACUUM VERBOSEe nos logs de autovacuum, além do novolog_autoanalyze_min_duration, reforçam a observabilidade da manutenção
- Mais detalhes nas views de progresso de vacuum e analyze, uso de memória e paralelismo em
Consultas de grafo por SQL
- Foi adicionado SQL/PGQ (SQL property graph queries)
- Entre as cargas de trabalho em que o modelo de vértices e arestas é útil estão detecção de fraude, recomendação, análise de redes, grafos de permissão, cadeia de suprimentos e organogramas
- Exemplo de definição de grafo de propriedades:
CREATE PROPERTY GRAPH store_graphcom especificação de VERTEX TABLES e EDGE TABLES
- A proposta não é abandonar o modelo relacional, mas adicionar mais uma forma de consultar os dados já existentes
- Segue a mesma linha de JSONB, busca textual e extensões, que não exigiram mudanças forçadas de arquitetura
- Do ponto de vista do desenvolvedor, isso permite usar consultas em grafo sem adicionar outro datastore, caminho de sincronização, superfície operacional ou mais um alvo para depurar às 2 da manhã
COPY mais útil
COPY FROMpassa a suportar ignorar várias linhas de cabeçalho- Isso é útil ao processar CSVs exportados por fornecedores, ferramentas internas ou arquivos com metadados extras no topo
COPY FROMganhaON_ERROR SET_NULL, permitindo transformar valores de entrada inválidos em null e oferecendo uma alternativa entre “falhar a carga inteira” e “pré-limpar tudo”- É mostrado um exemplo de carregamento de arquivo em que a coluna price mistura valores como 'N/A' e 'MISSING'
COPY TOpode gerar saída em formato JSON, incluindo um único array JSON, e também exportar tabelas particionadas diretamente (antes era necessárioCOPY (SELECT ...))- Exemplo para exportar uma tabela como array JSON válido:
WITH (FORMAT JSON, ARRAY true)
- Exemplo para exportar uma tabela como array JSON válido:
Melhorias de conveniência em SQL
GROUP BY ALLagrupa automaticamente expressões da lista de seleção que não sejam agregadas nem de janela, deixando SQL exploratório e consultas de relatório mais limpos- Funções de janela passam a suportar
IGNORE NULLSeRESPECT NULLSemlead,lag,first_value,last_valueenth_value INSERT ... ON CONFLICT DO SELECT ... RETURNINGfoi adicionado para retornar de forma mais direta a linha em conflito em operações de upsertUPDATEeDELETE FOR PORTION OFampliam o suporte a operações temporais, junto com funções de tempoRANDOM()expandidas
Melhorias gerais de desempenho
- O planner e o executor receberam muitas melhorias em anti-join, semi-join, constant folding, incremental sort em caminhos append, agregação antes de joins, cálculo de seletividade de joins e estatísticas de funções
- O Postgres evolui para reconhecer melhor formatos comuns de consulta e reduzir trabalho desnecessário
- Em alguns casos, parte da agregação é feita antes dos joins, diminuindo o número de linhas processadas
- Mais casos de
NOT INeLEFT JOINsão convertidos em anti-joins eficientes - Há mais visibilidade de
EXPLAINpara Memoize, melhor desempenho de ordenação com radix sort, verificações mais rápidas de constraints de chave estrangeira e uso de instruções SIMD na entrada de texto e CSV doCOPY FROM
- Em muitos casos, é possível obter comportamento melhor apenas com o upgrade, sem alterar o código da aplicação
Por que o Postgres 19 importa
- O destaque não é um recurso isolado, mas a amplitude (breadth)
- Para desenvolvedores de aplicações: consultas em grafo, sintaxe SQL aprimorada, melhorias em funções de janela e comportamento melhor de upsert
- Para operadores:
REPACK CONCURRENTLY, autovacuum melhorado, monitoramento ampliado, mudança online de checksum e maior visibilidade da replicação - Para quem prioriza desempenho: melhorias no planner, ganhos com SIMD, visibilidade de I/O assíncrono, verificação mais rápida de chaves estrangeiras e ordenação melhor
- Para quem constrói sobre o Postgres: novos hooks, módulo de conselho ao planner, melhorias de extensões, busca de estatísticas de FDW e continuidade do investimento no ecossistema de extensões
- Não se trata de uma evolução para uma única carga de trabalho ou persona, mas de um avanço simultâneo do Postgres como banco de dados e plataforma para aplicações, operações, análises e extensibilidade
- Como ainda não é GA, este é o momento de testar: rodar aplicações, validar migrações, verificar extensões, conferir planos de consultas críticas e revisar fluxos de replicação lógica e manutenção
1 comentários
Comentários do Hacker News
Já usei Postgres, Oracle, MS SQL Server e MySQL em projetos reais, e não usei SQLite a fundo, mas sei que é uma excelente opção
Hoje em dia, por mim mesmo, sempre evito Oracle e MySQL/MariaDB
O Postgres é excelente, mas eu gostaria que tivesse conexões leves e views materializadas atualizadas de forma síncrona. Mesmo que um pooler de conexões melhore a situação, o uso de memória por conexão simultânea ainda é anormalmente alto, e recursos como views indexadas do SQL Server permitem implementações elegantes, triviais e sempre corretas em cenários de dados complexos
O SQL Server pode ser caro, mas em muitos casos vale o que custa, e escolher o armazenamento de dados com cuidado pode evitar muitos problemas no futuro
Se for usar um provedor gratuito, é difícil superar o SQLite, e hoje ele dá conta da maioria dos casos de uso. Mas começa a desmoronar em backup, replicação e ferramentas. Se eu tiver que ser responsável pela disponibilidade do sistema e pela recuperação de desastres, não hesito em gastar dinheiro para reduzir o risco
Se for pagar qualquer quantia, eu vou até o fim. A experiência de desenvolvimento em torno do MSSQL é incomparável, e acho que os projetos SQL no SSMS e no Visual Studio hoje em dia são muito melhores do que coisas como Entity Framework. Se ainda somar ferramentas de terceiros como o RedGate, dá para substituir pacotes de consultoria de milhões de dólares
Eu não sugeriria subir um novo servidor Oracle ou DB2, mas se já existir um, provavelmente me oporia até o fim a refatorar só para eliminá-lo. Esses bancos de dados costumam vir acompanhados de uma enorme coleção de histórias de terror, e tentar reproduzir esses efeitos colaterais estranhos em um novo motor pode acabar destruindo o próprio negócio se não houver outra opção
Como DBA, quando você faz muito trabalho pesado de DBA, o Postgres está em outra categoria em relação ao SQL Server. O Postgres é nativo de Linux e open source, então sua flexibilidade, observabilidade interna e operabilidade não têm comparação com o SQL Server
No cenário técnico atual, considero o SQL Server praticamente morto. As empresas que ainda o usam são só organizações legadas centradas em Windows, e até essas estão diminuindo aos poucos
Também seria bom ter uma opção de atualização adiada. A ideia é processar várias atualizações de uma vez, considerando apenas os registros alterados desde a última atualização, mas não sei exatamente como a Oracle faz isso tecnicamente. Acho que esse recurso seria uma adição fantástica em comparação com praticamente qualquer banco de dados OLTP open source
Também estou bem curioso sobre o projeto OrioleDB: https://github.com/orioledb/orioledb/releases
Alguns anos atrás, eu sofria bastante com vacuum por causa de muitas inserções e exclusões aleatórias contínuas em algo parecido com uma tabela temporária. Resolvi isso acumulando mais mudanças na RAM e depois dando flush na tabela para aumentar o número de linhas alteradas por página, mas deu bastante trabalho encontrar um bom equilíbrio
Como alguém que usa Postgres na área científica há mais de 15 anos, estou começando a me preocupar com a falta de armazenamento colunar no PostgreSQL
À medida que os conjuntos de dados ficam maiores, as limitações do armazenamento do PG ficam cada vez mais evidentes. Várias extensões, como cetus, até podem oferecer essa funcionalidade, mas aí você passa a depender de que essas extensões continuem sendo suportadas, além de aumentar a complexidade
No começo, eu achava que usar tabelas do Postgres como armazenamento e o executor do Postgres traria um overhead inerente alto demais, então pensei que, se desse para chegar no nível de desempenho do Timescale, já seria bem legal. Não imaginei que pudesse se aproximar de um banco de dados analítico dedicado
Mas, à medida que o projeto avançou, o desempenho continuou melhorando, e agora passei a apoiar claramente a ideia de fazer cargas analíticas com Postgres + extensão
É como se preocupar porque a Apple não vende máquinas de lavar
Hoje em dia, muitas empresas usam no aplicativo principal um banco de dados relacional junto com um banco chave-valor ou um armazenamento de documentos
Não sei por que ninguém mencionou que o PostgreSQL 19 vai introduzir suporte nativo a application-time temporal data com base no padrão SQL:2011: https://www.depesz.com/2026/04/02/waiting-for-postgresql-19-...
_archive: https://www.postgresql.org/docs/current/tcn.htmlSe isso virar nativo, parece que vai ser realmente excelente, como a maioria das implementações do PostgreSQL
https://news.ycombinator.com/item?id=48413655
Não consigo dizer se este texto usa um estilo super-representado em dados de treinamento de LLM, ou se foi bastante polido com IA. Inclino mais para a segunda hipótese
Acho que quando o Claude escreve frases como “como alguém que faz X há muito tempo”, isso é um tipo de falha de alinhamento. Um LLM não deveria escrever como se tivesse experiência pessoal. Pessoas podem ter falado assim nos dados de treinamento, mas, mesmo que seja uma sequência de tokens estatisticamente plausível, acho que um LLM não deveria afirmar experiências de vida que não tem
Gostei das melhorias em COPY e replicação lógica. Hoje faço backup do banco PG para uma instância sidecar do Databasus, e isso é mais pesado do que todo o backend + DB + Caddy
Abaixo vai minha reclamação sobre o estilo de LLM
Em vez de ler frases como “Só isso já mostra: havia uma necessidade real por parte dos usuários, e o ecossistema preencheu essa lacuna”, “Parece simples, mas resolve problemas reais de operação” e “Não muda o mundo, mas melhora os fluxos de trabalho de dados do dia a dia”, se Orwell estivesse vivo hoje talvez tivesse declarado analfabetismo em inglês e aprendido Klingon
Os recursos de banco de dados em grafo parecem interessantes, mas a sintaxe
GRAPH_TABLEé horrível demaisSELECT customer_name FROM GRAPH_TABLE (myshop MATCH (c IS customers)-[IS customer_orders]->(o IS orders WHERE o.ordered_when = current_date) COLUMNS (c.name AS customer_name));Isso lembra neo4j, mas em 2026 não acho que seja algo que uma ferramenta séria devesse copiar desse jeito
No fim, o que me deixa curioso é a velocidade. Segurança em nível de linha é um recurso muito útil, mas tentar construir algo sério sobre a implementação do Postgres é temerário. O planner vira uma bagunça e o matching por linha destrói o desempenho
É SQL/PGQ, derivado da linguagem Cypher do Neo4J e que agora faz parte do padrão SQL
Seria bom se o PostgreSQL ganhasse compressão de bloco além de compressão de linha. Só compressão de linha tem efeito limitado demais
Dá para colocar os dados em um pool ZFS e ativar compressão de bloco, mas, se houvesse suporte nativo, haveria menos carga de configuração e talvez o desempenho fosse melhor
GROUP BY ALL realmente faz muito sentido quando você para para pensar, e é interessante porque eu nunca tinha pensado nisso antes
De uma perspectiva mais próxima de DevOps, eu queria muito que o PostgreSQL finalmente suportasse upgrade in-place entre versões principais consecutivas
A maioria das distribuições consegue lidar com a inconveniência de rodar a versão antiga e a nova ao mesmo tempo para o
pg_upgrade, mas, usando Docker, fazer upgrade para uma nova versão principal é realmente dolorosoFico feliz que GROUP BY ALL tenha sido adotado. Pelo que sei, é um conceito introduzido pelo DuckDB
A documentação do DuckDB também diz que vários recursos foram introduzidos primeiro no DuckDB e depois adotados por outros sistemas, incluindo recursos como
GROUP BY ALLhttps://duckdb.org/docs/lts/sql/dialect/friendly_sql