Resumen de PostgreSQL 17
PostgreSQL 17 es una versión mayor que incluye cumplimiento del estándar SQL/JSON para JSONB, copias de seguridad incrementales y mejoras significativas de rendimiento.
Soporte del estándar SQL/JSON
JSON_TABLE
Permite tratar datos JSON como una tabla relacional.
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: Obtener valor escalar
SELECT JSON_VALUE(data, '$.user.name') as name
FROM events;
-- JSON_QUERY: Obtener valor JSON (array/objeto)
SELECT JSON_QUERY(data, '$.user.tags' WITH WRAPPER) as tags
FROM events;
JSON_EXISTS
-- Verificar si existe JSON que coincida con la condición
SELECT *
FROM products
WHERE JSON_EXISTS(attributes, '$.colors[*] ? (@ == "red")');
Copias de seguridad incrementales
Permite respaldar solo los cambios desde la última copia de seguridad.
# Obtener copia de seguridad completa
pg_basebackup -D /backup/base --checkpoint=fast
# Obtener copia de seguridad incremental
pg_basebackup -D /backup/incr1 \
--incremental=/backup/base/backup_manifest
# Combinar al restaurar
pg_combinebackup /backup/base /backup/incr1 -o /restore
Ventajas
| Elemento | Copia completa | Incremental |
|---|---|---|
| Tiempo | Largo | Corto |
| Tamaño | Grande | Pequeño |
| Restauración | Simple | Requiere combinación |
Mejoras de rendimiento
Aceleración de VACUUM
PostgreSQL 16 vs 17:
- VACUUM de tablas grandes: hasta 20 veces más rápido
- Uso de memoria: hasta 20 veces menor
Optimización de I/O
-- Nuevas estadísticas de I/O
SELECT * FROM pg_stat_io;
-- Los resultados incluyen estadísticas de I/O por tipo de backend
Mejoras de índices
-- Mejoras en BRIN (Block Range Index)
CREATE INDEX ON events USING BRIN (created_at)
WITH (pages_per_range = 32);
-- BRIN multicolumna más eficiente
Nuevas funcionalidades
Extensión de 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 *; -- Agregado en PostgreSQL 17
Pushdown de agregación parcial
-- Agregación acelerada en tablas particionadas
SELECT date_trunc('month', created_at), COUNT(*)
FROM events -- Tabla particionada
GROUP BY 1;
Nuevas vistas del sistema
-- Progreso de consultas en ejecución
SELECT * FROM pg_stat_progress_copy;
SELECT * FROM pg_stat_progress_basebackup;
Mejoras en replicación lógica
Slots de failover
-- Sincronizar slots de replicación en el servidor standby
ALTER SUBSCRIPTION my_sub
SET (failover = true);
Resolución de conflictos en suscriptor
-- Configurar comportamiento en caso de conflicto
ALTER SUBSCRIPTION my_sub
SET (disable_on_error = false);
Puntos de migración
# Verificación antes de actualizar
pg_upgrade --check
# Actualización con 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
Resumen
PostgreSQL 17 facilita aún más el uso empresarial gracias al soporte del estándar SQL/JSON, copias de seguridad incrementales y mejoras significativas de rendimiento. Las nuevas funciones JSON son especialmente beneficiosas para aplicaciones que manejan datos JSON.
← Volver a la lista