El grupo de desarrolladores de PostgreSQL ha anunciado el lanzamiento de PostgreSQL 12, la última versión del sistema de gestión de bases de datos relacional de código abierto.
En PostgreSQL 12, se ha mejorado significativamente el rendimiento de las consultas, especialmente en relación con el manejo de grandes volúmenes de datos, y se ha optimizado el uso del espacio en disco en general.
Entre las nuevas características:
- implementación del lenguaje de consultas JSON Path (una parte fundamental del estándar SQL/JSON);
- optimización de la ejecución de expresiones de tabla comunes (WITH);
- soporte para columnas generadas
Además, la comunidad continúa trabajando en la extensibilidad y la fiabilidad de PostgreSQL, desarrollando el soporte para la internacionalización, las capacidades de autenticación y proporcionando caminos más sencillos para la administración del sistema.
Esta versión incluye la implementación de la interfaz de motores de almacenamiento conectables, lo que permite a los desarrolladores crear sus propios métodos de almacenamiento de datos.
Mejoras de rendimiento
PostgreSQL 12 incluye mejoras significativas en el rendimiento y el mantenimiento de procedimientos para sistemas de indexación y particionamiento.
Los índices B-tree, el tipo estándar de indexación en PostgreSQL, se han optimizado en la versión 12 para cargas de trabajo que implican modificaciones frecuentes de índices. El uso de la prueba de referencia TPC-C para PostgreSQL 12 mostró una reducción en el uso de espacio en un promedio del 40% y un aumento general en el rendimiento de consultas.
Las consultas a tablas particionadas han experimentado mejoras notables, especialmente para tablas compuestas de miles de secciones, lo que implica trabajar solo con partes limitadas de arreglos de datos. Se ha mejorado el rendimiento de la adición de datos a tablas particionadas mediante INSERT y COPY, así como la capacidad de adjuntar una nueva sección sin bloquear las consultas en ejecución.
En PostgreSQL 12 se han realizado mejoras adicionales en la indexación que afectan el rendimiento general, incluyendo:
- reducción de la sobrecarga al generar WAL para tipos de índices GiST, GIN y SP-GiST;
- la capacidad de crear lo que se conoce como índices cubrientes (covering indexes, propuesta INCLUDE) en índices GiST;
- la capacidad de realizar consultas de 'vecinos más cercanos' (k-NN search) utilizando el operador de distancia () y haciendo uso de índices SP-GiST;
- soporte para la recopilación de estadísticas de los valores más comunes (most-common value, MCV) mediante CREATE STATISTICS, lo que ayuda a obtener mejores planes de ejecución de consultas al usar columnas cuyas valores están distribuidos de manera irregular.
La compilación JIT utilizando LLVM, que apareció en PostgreSQL 11, ahora está habilitada por defecto. La compilación JIT mejora el rendimiento al trabajar con expresiones en cláusulas WHERE, listas de selección, agregados y algunas operaciones internas. Está disponible si se ha compilado PostgreSQL con LLVM o se utiliza un paquete de PostgreSQL que fue creado con LLVM habilitado.
Mejoras en las capacidades del lenguaje SQL y la compatibilidad con el estándar
PostgreSQL 12 introduce la capacidad de realizar consultas en documentos JSON utilizando expresiones de ruta JSON definidas en el estándar SQL/JSON. Tales consultas pueden utilizar los mecanismos de indexación existentes para documentos almacenados en formato JSONB para la extracción eficiente de datos.
Las expresiones de tabla comunes, también conocidas como consultas con WITH, en PostgreSQL 12 ahora pueden ejecutarse automáticamente utilizando sustitución, lo que puede ayudar a mejorar el rendimiento de muchas consultas existentes. En la nueva versión, la parte de la consulta WITH puede ejecutarse con sustitución solo si no es recursiva, no tiene efectos secundarios y se hace referencia a ella una sola vez en la parte siguiente de la consulta.
PostgreSQL 12 presenta soporte para "columnas generadas". Descrito en el estándar SQL, este tipo de columna calcula su valor en función del contenido de otras columnas en la misma tabla. En esta versión, PostgreSQL admite "columnas generadas almacenadas", donde el valor calculado se almacena en disco.
Internacionalización
PostgreSQL 12 amplía el soporte para colaciones ICU, permitiendo a los usuarios definir "colaciones no determinísticas" que pueden, por ejemplo, permitir comparaciones que no distingan entre mayúsculas y minúsculas o acentos.
Autenticación
PostgreSQL amplía su soporte para métodos de autenticación confiables con varias mejoras que ofrecen seguridad y funcionalidad adicionales. Esta versión presenta cifrado del lado del cliente y del servidor para autenticar a través de interfaces GSSAPI, así como la capacidad de PostgreSQL para detectar servidores LDAP, si PostgreSQL fue compilado con OpenLDAP.
Además, PostgreSQL 12 ahora soporta una variante de autenticación multifactor. Ahora, el servidor PostgreSQL puede solicitar al cliente que proporcione un SSL-certificado válido con el nombre de usuario correspondiente usando clientcert=verify-full, y combinar esto con un requisito separado de método de autenticación (por ejemplo, scram-sha-256).
Administración
En PostgreSQL 12 se introdujo la posibilidad de realizar reconstrucciones de índices no bloqueantes usando el comando REINDEX CONCURRENTLY. Esto permite a los usuarios evitar el tiempo de inactividad de la base de datos durante la reconstrucción prolongada de índices.
Además, en PostgreSQL 12 se puede habilitar o deshabilitar las sumas de verificación de páginas en un clúster que se encuentra en estado apagado, usando el comando pg_checksums. Anteriormente, las sumas de verificación de páginas, una función que ayuda a verificar la integridad de los datos almacenados en disco, solo podían habilitarse durante la inicialización del clúster de PostgreSQL a través de initdb.
Fuente: linux.org.ru
