El 3 de octubre de 2019 se lanzó una nueva versión de la base de datos de código abierto más avanzada del mundo. PostgreSQL 12 ahora está disponible con mejoras notables en el rendimiento de las consultas (particularmente en conjuntos de datos más grandes y la utilización general del espacio), entre otras características importantes.
En este blog, analizaremos estas nuevas funciones y le mostraremos cómo obtener e instalar esta nueva versión de PostgreSQL 12. También exploraremos algunas consideraciones a tener en cuenta al actualizar.
Características y mejoras de PostgreSQL 12
Comencemos mencionando algunas de las características y mejoras más importantes de esta nueva versión de PostgreSQL.
Indización
- Hay una optimización para la utilización del espacio y el rendimiento de lectura/escritura para los índices B-Tree.
- Reducción de los gastos generales de WAL para la creación de índices GiST, GIN y SP-GiST.
- Puede realizar consultas de K-vecino más cercano con el operador de distancia (<->) usando índices SP-GiST.
- Reconstruya índices sin bloquear las escrituras en un índice a través del comando REINDEX CONCURRENTLY, lo que permite a los usuarios evitar escenarios de tiempo de inactividad para reconstrucciones de índices prolongadas.
Particionamiento
- Hay mejoras sobre las consultas en tablas particionadas, particularmente para tablas con miles de particiones que solo necesitan recuperar datos de un subconjunto limitado.
- Mejoras de rendimiento para agregar datos a tablas particionadas con INSERT y COPY.
- Podrá adjuntar una nueva partición a una tabla sin bloquear las consultas.
SQL
- Ahora puede ejecutar consultas sobre documentos JSON utilizando expresiones de ruta JSON definidas en el estándar SQL/JSON y pueden utilizar los mecanismos de indexación existentes para documentos almacenados en formato JSONB para recuperar datos de manera eficiente.
- Las consultas CON ahora pueden incorporarse automáticamente en PostgreSQL 12 (si no es recursivo, no tiene efectos secundarios y solo se hace referencia una vez en una parte posterior de una consulta), lo que a su vez puede ayudar a aumentar el rendimiento de muchas consultas existentes.
- Introduce "columnas generadas". Este tipo de columna calcula su valor a partir del contenido de otras columnas en la misma tabla. También se admite el almacenamiento de este valor calculado en esto.
Internacionalización
- PostgreSQL 12 amplía su compatibilidad con intercalaciones ICU al permitir que los usuarios definan "intercalaciones no deterministas" que pueden, por ejemplo, permitir comparaciones que no distinguen entre mayúsculas y minúsculas o acentos.
Autenticación
- Introduce el cifrado del lado del servidor y del cliente para la autenticación a través de las interfaces GSSAPI.
- El servicio PostgreSQL puede descubrir servidores LDAP si está compilado con OpenLDAP.
- Autenticación multifactor, utilizando la opción clientcert=verify-full y un método de autenticación adicional configurado en el archivo pg_hba.conf.
Si desea aprovechar estas nuevas funciones y mejoras, puede ir a la página de descarga y obtener la última versión de PostgreSQL. Si necesita una configuración de HA, aquí hay un blog que le muestra cómo instalar y configurar PostgreSQL para HA.
Cómo instalar PostgreSQL 12
Para este ejemplo, vamos a utilizar CentOS7 como sistema operativo. Por lo tanto, debemos ir al sitio de descarga del sistema operativo basado en RedHat e instalar la versión correspondiente.
$ yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Instalará el repositorio de PostgreSQL con paquetes fuente, de prueba y estables.
$ head /etc/yum.repos.d/pgdg-redhat-all.repo
# PGDG Red Hat Enterprise Linux / CentOS stable repositories:
[pgdg12]
name=PostgreSQL 12 for RHEL/CentOS $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
...
Luego, instale los paquetes PostgreSQL12 de cliente y servidor. Instalará algunas dependencias de Python.
$ yum install postgresql12 postgresql12-server
Ahora, puede inicializar su nueva base de datos PostgreSQL 12.
$ /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK
Y habilite/inicie el servicio PostgreSQL.
$ systemctl enable postgresql-12
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /usr/lib/systemd/system/postgresql-12.service.
$ systemctl start postgresql-12
Y eso es todo. Tiene la nueva versión de PostgreSQL en funcionamiento.
$ psql
psql (12.0)
Type "help" for help.
postgres=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 12.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)
Ahora que ha instalado la última versión de PostgreSQL, puede migrar sus datos a este nuevo nodo de base de datos.
Actualización a PostgreSQL 12
Si desea actualizar su versión actual de PostgreSQL a esta nueva, tiene tres opciones principales que realizarán esta tarea.
- pg_dump :Es una herramienta de copia de seguridad lógica que le permite volcar sus datos y restaurarlos en la nueva versión de PostgreSQL. Aquí tendrá un período de inactividad que variará según el tamaño de sus datos. Debe detener el sistema o evitar nuevos datos en el nodo principal, ejecutar pg_dump, mover el volcado generado al nuevo nodo de la base de datos y restaurarlo. Durante este tiempo, no puede escribir en su base de datos maestra de PostgreSQL para evitar inconsistencias en los datos.
- Pg_actualizar :Es una herramienta de PostgreSQL para actualizar su versión de PostgreSQL en el lugar. Podría ser peligroso en un entorno de producción y no recomendamos este método en ese caso. Con este método, también tendrá tiempo de inactividad, pero probablemente será considerablemente menor que con el método pg_dump anterior.
- Replicación lógica :Desde PostgreSQL 10, ha podido utilizar este método de replicación que le permite realizar actualizaciones de versiones importantes con cero (o casi cero) tiempo de inactividad. De esta forma, puede agregar un nodo en espera en la última versión de PostgreSQL, y cuando la replicación esté actualizada, puede realizar un proceso de conmutación por error para promover el nuevo nodo de PostgreSQL.
Consideraciones antes de actualizar a PostgreSQL 12
En general, para todo proceso de actualización y en toda tecnología, hay varios puntos a tener en cuenta. Veamos algunos de los principales.
- Se eliminaron los tipos de datos abstime, reltime y tinterval.
- La configuración de recovery.conf está en el archivo postgresql.conf y ya no se usa. Si tiene este archivo creado, el servidor no se iniciará. Los archivos recovery.signal y standby.signal ahora se usan para cambiar al modo no principal. Se ha cambiado el nombre de la configuración trigger_file a advance_trigger_file y se ha eliminado la configuración standby_mode.
- No se permiten varias especificaciones de destino de recuperación en conflicto.
- Se requiere la especificación de "-f" para enviar el contenido del volcado a la salida estándar en pg_restore.
- La longitud máxima de entrada de índice se reduce en ocho bytes en los índices B-Tree, para mejorar el manejo de entradas duplicadas. La operación REINDEX en un índice pg_upgrade'd de una versión anterior podría fallar.
- DROP IF EXISTS FUNCTION/PROCEDURE/AGGREGATE/ROUTINE genera un error si no se proporciona una lista de argumentos y hay varios objetos coincidentes.
Para obtener información más detallada sobre las nuevas características de PostgreSQL 12 y las consideraciones antes de migrarlo, puede consultar la página web de Notas oficiales de la versión.