Blog

Noticias, PostgreSQL

Lanzamiento de PostgreSQL 17 Beta 1

El Grupo Global de Desarrollo de PostgreSQL anuncia que ya puede descargarse la primera versión beta de PostgreSQL 17. Esta versión ofrece avances de todas las características que contendrá PostgreSQL 17 tras su disponibilidad general, aunque algunos detalles de la versión podrían cambiar durante el periodo beta.

La información sobre todas las características y cambios introducidos en PostgreSQL 17 se encuentra en las notas de la versión:

https://www.postgresql.org/docs/17/release-17.html

De acuerdo con el espíritu de la comunidad de código abierto de PostgreSQL, recomendamos encarecidamente que prueben las nuevas características de PostgreSQL 17 en sus sistemas. Esto nos ayudará a eliminar errores u otros posibles problemas. Aunque no recomendamos ejecutar PostgreSQL 17 Beta 1 en un entorno de producción, les invitamos a encontrar formas de ejecutar esta versión beta con cargas de trabajo típicas de sus aplicaciones.

Sus pruebas y comentarios ayudarán a la comunidad a asegurar que PostgreSQL 17 cumpla con nuestros estándares de entrega de una versión estable y confiable de la base de datos relacional de código abierto más avanzada del mundo. Por favor, lean más sobre nuestro proceso de pruebas beta y cómo pueden contribuir:

https://www.postgresql.org/developer/beta/

Características destacadas de PostgreSQL 17

Mejoras en el rendimiento operativo y de consultas

PostgreSQL 17 se basa en versiones recientes y continúa mejorando el rendimiento en todo el sistema. Vacuum, el proceso de PostgreSQL responsable de recuperar espacio de almacenamiento, cuenta con una nueva estructura de datos interna que ha conseguido una reducción del uso de la memoria de hasta 20 veces, además de mejoras en el tiempo total necesario para completar su trabajo. Asimismo, el uso de la memoria de parte de vacuum (controlado por maintenance_work_mem) ya no está limitado a 1 GB, lo cual hace posible dedicar más recursos al mismo proceso.

Esta versión introduce una interfaz de flujo de entrada/salida, y puede ofrecer mejoras de rendimiento al realizar escaneos secuenciales y al ejecutar ANALYZE. PostgreSQL 17 también incluye parámetros de configuración que pueden controlar la escalabilidad de los búferes de transacciones, subtransacciones y multixact.

Ahora PostgreSQL 17 puede utilizar tanto las estadísticas del planificador como la disposición del ordenamiento de las expresiones de tabla comunes (consultas WITH) para optimizar aún más estas consultas y contribuir a una ejecución más rápida de las mismas. Adicionalmente, esta versión mejora significativamente el tiempo de ejecución de las consultas que utilizan la cláusula IN con índices B-tree. A partir de esta versión, PostgreSQL puede eliminar sentencias IS NOT NULL redundantes de la ejecución realizada en columnas que contienen una restricción NOT NULL. Además, ya no necesita procesar consultas que contengan una cláusula IS NULL en columnas IS NOT NULL. Desde PostgreSQL 17, es posible usar la creación de índices en paralelo para índices BRIN.

Las cargas de trabajo con cambios altamente concurrentes pueden beneficiarse de PostgreSQL 17 gracias a una mejora en la gestión de los bloqueos del registro de escritura anticipada (WAL). De hecho, algunas pruebas han demostrado un incremento del rendimiento de hasta el doble.

Finalmente, PostgreSQL 17 añade un mayor número de instrucciones SIMD explícitas, incluyendo el soporte AVX-512 para la función bit_count.

Mejoras en las cargas de trabajo particionadas y distribuidas

PostgreSQL 17 aporta una mayor flexibilidad a la gestión de particiones, añadiendo la capacidad de dividir y fusionar particiones, así como el soporte a tablas particionadas para columnas de identidad y restricciones de exclusión. Adicionalmente, el conector de datos externos de PostgreSQL (postgres_fdw) puede obtener beneficios de rendimiento en consultas con EXISTS y subconsultas IN, ya que ahora pueden ser enviadas al servidor remoto.

PostgreSQL 17 añade nuevas características a la replicación lógica que simplifican su uso en cargas de trabajo de alta disponibilidad y en las actualizaciones. A partir de las actualizaciones de PostgreSQL 17 a versiones posteriores, ya no será necesario eliminar slots de replicación lógica cuando se utiliza pg_upgrade. Esto permitirá evitar la resincronización de datos tras una actualización. Además, esta versión introduce el control de failover para la replicación lógica, que ofrece un mayor control en la gestión de bases de datos PostgreSQL en entornos de alta disponibilidad. PostgreSQL 17 también permite a los suscriptores de replicación lógica utilizar índices hash para las búsquedas, e introduce la herramienta de línea de comandos pg_createsubscriber que permite añadir replicación lógica a una réplica que utiliza replicación física.

Experiencia para los desarrolladores

PostgreSQL 17 sigue desarrollándose sobre el estándar SQL/JSON, y añade soporte para las funciones JSON_TABLE que pueden convertir JSON en una tabla PostgreSQL estándar, así como para el constructor SQL/JSON (JSON, JSON_SCALAR, JSON_SERIALIZE) y para las funciones de consulta (JSON_EXISTS, JSON_QUERY, JSON_VALUE). Estas características fueron originalmente previstas para la versión PostgreSQL 15, aunque se anularon durante el período beta debido a ciertas cuestiones de diseño. De hecho, esta es una de las razones por las que les pedimos que nos ayuden a probar las características durante el período beta. Adicionalmente, PostgreSQL 17 añade más funcionalidad a su implementación jsonpath, y la capacidad de convertir valores JSON a diferentes tipos de datos.

El comando MERGE ahora admite la cláusula RETURNING, lo cual hace posible seguir trabajando con registros modificados. También, usando la nueva función merge_action, es posible visualizar qué parte del comando MERGE modifica el registro. Además, PostgreSQL 17 permite actualizar las vistas usando el comando MERGE, y agrega la cláusula WHEN NOT MATCHED BY SOURCE que permite establecer ciertos comportamientos si un registro fuente no cumple con las condiciones.

COPY se usa para cargar y exportar de forma masiva y eficiente datos desde PostgreSQL. Y ahora, con PostgreSQL 17, se puede apreciar una mejora del rendimiento de hasta el doble en la exportación de registros de gran tamaño. Además, COPY ha mejorado el rendimiento en los casos en que la codificación de origen coincide con la codificación de destino, y cuenta con la nueva opción ON_ERROR, que permite que la copia continúe incluso si se produce un error en la inserción de un registro. PostgreSQL 17 también proporciona un mejor soporte para rutinas de cancelación de consultas asíncronas y más seguras, que los controladores pueden adoptar utilizando la API libpq.

PostgreSQL 17 incorpora un proveedor de intercalación que proporciona una semántica de ordenación similar a la de la intercalación C, excepto que con codificación UTF-8 en lugar de SQL_ASCII. Se garantiza que esta nueva intercalación es inmutable, lo cual asegura que los valores de retorno de las ordenaciones no variarán independientemente del sistema en el que se ejecute la instalación de PostgreSQL.

Características de seguridad

PostgreSQL 17 añade el nuevo parámetro de conexión, sslnegotiation, que permite a PostgreSQL realizar handshakes TLS directos al utilizar ALPN, eliminando así un ida y vuelta por la red. PostgreSQL está registrado como postgresql en el directorio ALPN.

Esta versión introduce triggers de eventos que se ejecutan durante la autenticación, y en libpq incluye una nueva API llamada PQchangePassword que realiza de forma automática el hash de las contraseñas en el lado del cliente para evitar el registro accidental en texto plano en el servidor.

PostgreSQL 17 añade un nuevo rol predefinido llamado pg_maintain que otorga a los usuarios permiso para ejecutar VACUUM, ANALYZE, CLUSTER, REFRESH MATERIALIZED VIEW, REINDEX, y LOCK TABLE en todas las relaciones. Esta versión también garantiza el uso seguro de search_path para operaciones de mantenimiento como VACUUM, ANALYZE, CLUSTER, REFRESH MATERIALIZED VIEW e INDEX. Por último, ahora es posible que los usuarios utilicen ALTER SYSTEM para establecer valores para variables de servidor personalizadas no reconocidas.

Gestión de respaldos y exportación

PostgreSQL 17 introduce la capacidad de realizar respaldos incrementales usando pg_basebackup, y añade una nueva herramienta llamada pg_combinebackup que se usa como parte del proceso de restauración de respaldos. Esta versión agrega a pg_dump la nueva opción llamada --filter, que permite al usuario definir un archivo que contenga instrucciones sobre qué objetos incluir o excluir de un volcado.

Monitoreo

El comando EXPLAIN, que proporciona información sobre planes de consulta y ejecución, incluye dos nuevas opciones: SERIALIZE, que muestra el tiempo empleado en convertir los datos para su transmisión en la red, y MEMORY, que indica el uso de la memoria por parte del optimizador. Además, EXPLAIN puede mostrar ahora cuánto tiempo se emplea en las lecturas y escrituras de bloques de entrada y salida.

PostgreSQL 17 normaliza los parámetros para CALL en pg_stat_statements, reduciendo el número de entradas para procedimientos almacenados invocados con frecuencia. Adicionalmente, los reportes de progreso de  VACUUM ahora muestran el progreso de la ejecución del mismo en los índices. PostgreSQL 17 también introduce la nueva vista, pg_wait_events, que proporciona descripciones sobre eventos de espera y puede combinarse con pg_stat_activity para dar más información sobre la razón por la que una sesión activa está esperando. Además, parte de la información de la vista pg_stat_bgwriter se encuentra ahora en la nueva vista pg_stat_checkpointer.

Características adicionales

Muchas otras nuevas características y mejoras han sido añadidas a PostgreSQL 17. Varias de ellas también pueden ser útiles para sus casos de uso. Para una lista completa de las características nuevas y de las modificadas, consulten las notas de la versión:

https://www.postgresql.org/docs/17/release-17.html

Pruebas de errores y compatibilidad

La estabilidad de cada versión de PostgreSQL depende en gran medida de que ustedes, la comunidad, prueben la próxima versión con sus cargas de trabajo y herramientas de prueba para detectar errores y regresiones antes del lanzamiento oficial de PostgreSQL 17. Dado que se trata de una versión beta, es posible que se produzcan pequeños cambios en los comportamientos de la base de datos, los detalles de las funciones y las API. Sus impresiones y pruebas ayudarán a determinar los ajustes finales de las nuevas funciones, así que les rogamos que la prueben lo antes posible. La calidad de las pruebas de los usuarios contribuirá a definir el momento en el que lanzaremos la versión final. Una lista de los problemas abiertos está disponible al público en la wiki de PostgreSQL. Pueden reportar errores usando el siguiente formulario en el sitio web de PostgreSQL: https://www.postgresql.org/account/submitbug/

Calendario de la versión beta

Este es el primer lanzamiento beta de la versión 17. Según lo requieran las pruebas, el Proyecto PostgreSQL publicará betas adicionales. Serán seguidas por una o más versiones candidatas, hasta el lanzamiento final en septiembre u octubre de 2024. Para más información, consulten la página de Pruebas Beta.

Enlaces

Haz clic aquí para leer la noticia original en inglés en la página web oficial de PostgreSQL.