sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL 11:Novedades

¡La versión más reciente y mejor de PostgreSQL, v11, se lanzará más tarde esta semana! Aquí hay un vistazo rápido a las nuevas características de esta versión.

Mejoras de particionamiento

El mayor conjunto de mejoras es para el soporte de partición. Postgres 11 admite:

  • actualizar filas puede moverlas entre particiones
  • particiones predeterminadas
  • creación automática de índices
  • las restricciones de clave externa son compatibles con las tablas particionadas
  • índices únicos
  • desplazamiento de agregación a particiones
  • partición por hash
  • los hijos de partición en servidores remotos (postgres_fdw) se pueden actualizar
  • INSERT..ON CONFLICT es compatible con tablas particionadas
  • planes de consultas más eficientes y ejecución de consultas más rápida

Obtenga más información sobre estas mejoras aquí.

Más paralelismo

Hay un montón de mejoras en general relacionadas con el aumento del paralelismo. Uniones, uniones, creación de tablas y vistas con "CREATE..AS SELECT", creación de índices btree y más se benefician de estos cambios.

Aquí hay un artículo sobre las mejoras en el rendimiento de la creación de índices en Postgres 11.

Consultas cumplidas con JIT

Aunque está inhabilitada de forma predeterminada en 11, la compilación de consultas JIT basada en LLVM ahora está integrada en Postgres. El servidor ahora puede optar por compilar ciertas consultas (aquellas con estimaciones de ejecución superiores a un umbral) utilizando LLVM, lo que resulta en consultas más rápidas. Esta compilación es automática y transparente para la aplicación.

Aquí hay algunos números.

Índices de cobertura

Se han agregado ahora índices de cobertura, disponibles en otros RDBMS pero no en PostgreSQL. Con esto, es posible tener un índice como este (nueva sintaxis):

CREATE INDEX empid_idx ON employees(empid) INCLUDE (empname);

Tal índice incluye atributos extra (aquí “empname”) en el propio índice, y hace posible satisfacer consultas como:

SELECT empname FROM employees WHERE empid BETWEEN 1000 and 2000;

completamente usando escaneos de solo índice y sin tocar el montón en absoluto.

Obtenga más información sobre cómo cubrir índices aquí.

Procedimientos almacenados

Los procedimientos almacenados son otra instancia más de PostgreSQL que se pone al día con otros RDBMS. Son, por supuesto, similares a las funciones almacenadas que PostgreSQL ha soportado desde hace mucho tiempo, pero la única gran cosa posible solo usando procedimientos es el control de transacciones. Puede confirmar y deshacer transacciones desde dentro de los procedimientos almacenados.

Eche un vistazo a la documentación CREATE PROCEDURE.

Agregar columnas a las tablas

Alterar una tabla para agregar una nueva columna NOT NULL con un valor DEFAULT fue un poco molesto en PostgreSQL, ya que esto provocó que el servidor reescribiera toda la tabla. Con v11 ahora es posible tener declaraciones DDL como esta:

ALTER TABLE users ADD COLUMN foo_factor integer NOT NULL DEFAULT 42;

ejecutar en tiempo constante. Las filas no se tocan cuando se ejecuta y, en cambio, se actualizan "perezosamente".

Obtenga más información sobre esta característica aquí.

Funciones SHA

Y finalmente, aquellos de ustedes que usaron pgcrypto solo para funciones SHA ahora pueden cambiar a usar las integradas en PostgreSQL 11:

bench=# \df pg_catalog.sha*
                          List of functions
   Schema   |  Name  | Result data type | Argument data types | Type
------------+--------+------------------+---------------------+------
 pg_catalog | sha224 | bytea            | bytea               | func
 pg_catalog | sha256 | bytea            | bytea               | func
 pg_catalog | sha384 | bytea            | bytea               | func
 pg_catalog | sha512 | bytea            | bytea               | func
(4 rows)

bench=# SELECT sha256('hello');
                               sha256
--------------------------------------------------------------------
 \x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
(1 row)