Nuevas características de PostgreSQL 17 - Mejoras en rendimiento y usabilidad

2025.12.10

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

ElementoCopia completaIncremental
TiempoLargoCorto
TamañoGrandePequeño
RestauraciónSimpleRequiere 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