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
| Item | Backup Completo | Incremental |
|---|---|---|
| Tempo | Longo | Curto |
| Espaço | Grande | Pequeno |
| Restauração | Simples | Requer 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