Novidades do PostgreSQL 17 - Performance e Usabilidade Aprimoradas

2025.12.10

Visão Geral do PostgreSQL 17

PostgreSQL 17 é um lançamento major que inclui conformidade com o padrão SQL/JSON para JSONB, backup incremental e melhorias significativas de performance.

Suporte ao Padrão SQL/JSON

JSON_TABLE

Permite tratar dados JSON como tabelas relacionais.

SELECT *
FROM JSON_TABLE(
  '[{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]',
  '$[*]'
  COLUMNS (
    id INT PATH '$.id',
    name TEXT PATH '$.name'
  )
) AS users;

-- Resultado:
-- id | name
-- ---+------
--  1 | Alice
--  2 | Bob

JSON_QUERY / JSON_VALUE

-- JSON_VALUE: Obtém valor escalar
SELECT JSON_VALUE(data, '$.user.name') as name
FROM events;

-- JSON_QUERY: Obtém valor JSON (arrays/objetos)
SELECT JSON_QUERY(data, '$.user.tags' WITH WRAPPER) as tags
FROM events;

JSON_EXISTS

-- Verifica se JSON correspondente à condição existe
SELECT *
FROM products
WHERE JSON_EXISTS(attributes, '$.colors[*] ? (@ == "red")');

Backup Incremental

Permite fazer backup apenas das alterações desde o último backup.

# Obter backup completo
pg_basebackup -D /backup/base --checkpoint=fast

# Obter backup incremental
pg_basebackup -D /backup/incr1 \
  --incremental=/backup/base/backup_manifest

# Mesclar ao restaurar
pg_combinebackup /backup/base /backup/incr1 -o /restore

Vantagens

ItemBackup CompletoIncremental
TempoLongoCurto
EspaçoGrandePequeno
RestauraçãoSimplesRequer mesclagem

Melhorias de Performance

VACUUM Mais Rápido

PostgreSQL 16 vs 17:
- VACUUM em tabelas grandes: Até 20x mais rápido
- Uso de memória: Até 20x menor

Otimização de I/O

-- Novas estatísticas de I/O
SELECT * FROM pg_stat_io;

-- Resultados incluem estatísticas de I/O por tipo de backend

Melhorias de Índice

-- Melhoria do BRIN (Block Range Index)
CREATE INDEX ON events USING BRIN (created_at)
WITH (pages_per_range = 32);

-- BRIN multi-coluna mais eficiente

Novas Funcionalidades

Extensão do MERGE

MERGE INTO inventory t
USING new_items s
ON t.product_id = s.product_id
WHEN MATCHED THEN
  UPDATE SET quantity = t.quantity + s.quantity
WHEN NOT MATCHED THEN
  INSERT (product_id, quantity)
  VALUES (s.product_id, s.quantity)
RETURNING *;  -- Adicionado no PostgreSQL 17

Pushdown de Agregação Parcial

-- Agregações em tabelas particionadas ficaram mais rápidas
SELECT date_trunc('month', created_at), COUNT(*)
FROM events  -- Tabela particionada
GROUP BY 1;

Novas Views de Sistema

-- Progresso de queries em execução
SELECT * FROM pg_stat_progress_copy;
SELECT * FROM pg_stat_progress_basebackup;

Melhorias na Replicação Lógica

Slots de Failover

-- Sincronizar slots de replicação no servidor standby
ALTER SUBSCRIPTION my_sub
SET (failover = true);

Resolução de Conflitos no Subscriber

-- Configurar comportamento em caso de conflito
ALTER SUBSCRIPTION my_sub
SET (disable_on_error = false);

Pontos de Migração

# Verificação antes do upgrade
pg_upgrade --check

# Upgrade com pg_upgrade
pg_upgrade \
  -b /usr/lib/postgresql/16/bin \
  -B /usr/lib/postgresql/17/bin \
  -d /var/lib/postgresql/16/main \
  -D /var/lib/postgresql/17/main

Resumo

PostgreSQL 17, com conformidade ao padrão SQL/JSON, backup incremental e melhorias significativas de performance, torna o uso empresarial ainda mais fácil. Especialmente para aplicações que lidam com dados JSON, as novas funções JSON trazem grandes benefícios.

← Voltar para a lista