Novedades en PostgreSQL 12

Retrato de un elefante

En octubre vio la luz la última versión de PostgreSQL (12), cómo ya vimos la forma de instalar la versión 11 en sistemas Debian/Ubuntu y el proceso es completamente análogo para la versión 12 vamos a revisar las principales novedades de esta versión 12.

Rendimiento:

Gran parte de las nuevas características de esta versión de PostgreSQL se centran sobre todo en mejoras de rendimiento, empezando por una agresiva optimización en el espacio utilizado para almacenar los índices B-Tree (los más utilizados). Si tomamos como referencia una carga sintética como pueda ser el TPC-C, la ganancia de espacio con esta nueva versión alcanza el 40%, esta optimización de los índices se traduce a su vez en una mejora general del rendimiento en las consultas que utilicen este tipo de índices.

Las mejoras de rendimiento también afectan a otro tipo de índices, incluyendo una optimización en la escritura de operaciones sobre índices GIN, GIST y SP-GIST en los ficheros de registro, o la posibilidad de utilizar operadores de distancia para encontrar búsquedas de los k vecinos más cercanos, con la correspondiente mejora de rendimiento.

El reindexado ahora puede hacerse de forma concurrente, sin bloquear las escrituras en el índice mientras que se produce dicho proceso.

Además, se ha mejorado el rendimiento en las búsquedas en tablas con un elevado número de particiones, así como las operaciones de copia en tablas particionadas.

La capacidad de compilación en tiempo de operación que se introdujo con la versión 11 ahora se utiliza por defecto siempre que la base de datos esté compilada con soporte LLVM (este es el caso de los paquetes de Debian). La compilación en tiempo de operación permite generar funciones optimizadas para la CPU para evaluar condiciones, lo que permite la ejecución nativa de este tipo de cláusulas con la mejora que eso conlleva. Si estáis utilizando una versión poco actualizada de Debian o Ubuntu podréis que obtener una versión actualizada de LLVM en este repositorio.

Se han incluido una pléyade de pequeñas mejoras a la forma en la que funciona el optimizador de consultas y al uso que hace de las estadísticas del sistema.

Gestión de la replicación:

El fichero recovery.conf ya no se utiliza, además el sistema no arrancará si ese fichero está presente. En su lugar, es posible especificar las opciones de dicho fichero en un fichero postgresql.conf en el directorio de datos.

Los procesos wal_sender ya no cuentan para el número máximo de conexiones del sistema y se han añadido nuevos comandos de control para facilitar la gestión de las replicaciones, incluyendo la posibilidad de copiar slots de replicación físicos (de esta forma es posible crear una nueva réplica desde una réplica existente).

Otras mejoras:

Se han introducido cambios para adoptar nuevas funcionalidades del estándar SQL, en particular funciones del estándar SQL/JSON, ahora es posible realizar funciones sobre documentos JSON utilizando expresiones JSON, lo que permite utilizar los mecanismos de indexado sobre documentos almacenados en formato jsonb.

Además, se introducen las columnas generadas, estas columnas derivan su valor de otras columnas de la misma fila de la tabla, por ejemplo, se podría almacenar el valor de una transacción en una divisa y a la vez generar el valor en otra divisa utilizando el tipo de cambio. Se trata de una funcionalidad que antes podría realizarse mediante disparadores pero que ahora además de ser más eficiente cumple con el estándar.

Foreign Data Wrappers

Se han introducido diversas mejoras, incluyendo la posibilidad de solicitar cláusulas de ordenación y límite en servidores remotos en muchos más casos. Además, se han mejorado las estimaciones del optimizador cuando se utilizan este tipo de servidores remotos. Cuando se usan este tipo de servidores en vistas, ahora se realizan las comprobaciones “WITH CHECK OPTION” debidamente.

Cambios en algunas tablas del sistema

Se han limpiado valores y funciones en tablas del sistema que pueden hacer que alguna implementación un poco desfasada deje de funcionar, tal es el caso por ejemplo de Drupal, si usáis Drupal 8 y estáis pensando un actualizar a PostgreSQL 12, echad un vistazo a esta incidencia (parche incluido).