PostgreSQL 14 (2021-09-30)

../../_images/the_news.png

https://postgresweekly.com/issues/425

postgres=# select ('{ "postgres": { "release": 14}}'::jsonb)['postgres']['release'];
 jsonb
-------
 14
(1 ligne)

postgres=# SELECT ('{"this": {"now": {"works": "in postgres 14!"}}}' :: jsonb) ['this'] ['now'] ['works'];
       jsonb
-------------------
 "in postgres 14!"
(1 ligne)

Description par Dalibo

PostgreSQL 14 apporte de nouvelles fonctionnalités aux développeurs et administrateurs pour déployer leurs applications adossées aux bases de données.

Des innovations sont apportées aux types de données complexes, facilitant l’accès aux données JSON et le support des plages de données non contiguës.

Poursuivant la tendance, cette dernière version améliore les trafics de charges à haute-performance et distribuées, avec des avancées significatives dans le support des connexions concurrentes, des trafics intensifs en écriture, le parallélisme des requêtes et la réplication logique.

Description par postgresqlweekly

Just over a year from the final release of Postgres 13, the next major release is here. Like with 13, 14 is what you could call an ‘evolutionary’ release with no huge new features (it’s all about the little things), but a laundry list of enhancements and a sense of maturity.

These things include:

Introduction

Le projet PostgreSQL Global Development Group vient d’annoncer la disponibilité de la première bêta de PostgreSQL 14.

Voici quelques-unes des améliorations et nouveautés apportées par cette nouvelle version majeure.

Performance

Cette version présente des améliorations significatives du débit des transactions pour les systèmes PostgreSQL qui ont un grand nombre de connexions à la base de données, qu’ils soient dans un état actif ou inactif.

B-Tree

PostgreSQL 14 contient également des gains supplémentaires dans la réduction de la surcharge d’indexation de B-tree , y compris la réduction du gonflement sur les tables avec des index fréquemment mis à jour.

index GiST

Les index GiST peuvent désormais pré-trier les données pendant leur processus de construction, permettant à la fois une création d’index plus rapide et des index plus petits.

index SP-GiST

Les index SP-GiST prennent désormais en charge les index de couverture qui permettent aux utilisateurs d’ajouter des colonnes non recherchées supplémentaires à l’index via la clause INCLUDE.

Il existe de nombreuses améliorations du parallélisme des requêtes dans PostgreSQL 14.

En plus des améliorations de performances globales pour les analyses séquentielles parallèles, la directive RETURN QUERY dans PL / pgSQL peut désormais exécuter des requêtes avec parallélisme.

MATERIALIZED VIEW

REFRESH MATERIALIZED VIEW peut désormais également utiliser le parallélisme des requêtes

postgres_fdw

PostgreSQL 14 introduit également la possibilité de tirer parti du parallélisme des requêtes lors de l’interrogation de bases de données distantes à l’aide de wrappers de données étrangères .

L’encapsuleur de données étrangères PostgreSQL, postgres_fdw , a ajouté la prise en charge de cela dans PostgreSQL 14 lorsque l’indicateur async_capable est défini.

postgres_fdw prend également en charge les insertions en bloc et peut importer des partitions de table à l’aide de IMPORT FOREIGN SCHEMA et peut maintenant exécuter TRUNCATE sur des tables étrangères.

Partitionnement

Cette version comporte également plusieurs améliorations du système de partitionnement, notamment des gains de performances lors de la mise à jour ou de la suppression de lignes sur des tables où seules quelques partitions sont affectées.

Dans PostgreSQL 14, les partitions peuvent maintenant être détachées de manière non bloquante en utilisant la commande ALTER TABLE … DETACH PARTITION … CONCURRENTLY.

Le tri incrémentiel, introduit dans la version précédente, peut désormais être utilisé par les fonctions de fenêtre dans PostgreSQL 14.

Cette nouvelle version ajoute plus de fonctionnalités aux statistiques étendues, qui peuvent désormais être appliquées aux expressions.

PostgreSQL prend en charge la compression sur ses colonnes de «données surdimensionnées» (c’est-à-dire le système TOAST) depuis des décennies, mais cette version ajoute la possibilité de choisir maintenant d’utiliser la compression LZ4 pour la compression de colonne.

PostgreSQL apporte aussi des améliorations de performances dans les domaines de la réplication et de la récupération. Notamment sur la façon dont PostgreSQL démarre lors d’une récupération après incident, et vous pouvez maintenant utiliser pg_rewind sur une instance PostgreSQL qui est en mode veille.

Types de données + SQL ( datemultirange )

S’appuyant sur son support existant pour les types de plage, PostgreSQL 14 ajoute le nouveau type multirange qui vous permet de spécifier une liste ordonnée de plages non contiguës, par exemple:

SELECT datemultirange (
    daterange ('2021-07-01', '2021-07-31'),
    daterange ('2021-09-01', '2021-09-30'),
    daterange ('2021-11-01') , '2021-11-30'),
    daterange ('2022-01-01', '2022-01-31'),
    daterange ('2022-03-01', '2022-04-07')
);

Le nouveau type multirange prend en charge les opérations existantes disponibles pour les types de plage.

PostgreSQL 14 ajoute maintenant un cadre général d’indexation pour récupérer des informations dans des objets imbriqués.

Implementation of subscripting for jsonb

Implementation

Subscripting for jsonb does not support slices, does not have a limit for the number of subscripts, and an assignment expects a replace value to have jsonb type. There is also one functional difference between assignment via subscripting and assignment via jsonb_set(). When an original jsonb container is NULL, the subscripting replaces it with an empty jsonb and proceeds with an assignment.

For the sake of code reuse, we rearrange some parts of jsonb functionality to allow the usage of the same functions for jsonb_set and assign subscripting operation.

The original idea belongs to Oleg Bartunov.

Annonce

Par exemple, vous pouvez maintenant récupérer des informations imbriquées dans le type de données JSONB à l’aide de la syntaxe d’indice, par exemple:

postgres=# SELECT ('{"this": {"now": {"works": "in postgres 14!"}}}' :: jsonb) ['this'] ['now'] ['works'];
       jsonb
-------------------
 "in postgres 14!"
(1 ligne)

PostgreSQL 14 ajoute également la prise en charge des paramètres OUT dans les procédures stockées et permet à la clause GROUP BY d’utiliser le mot clé DISTINCT pour supprimer les combinaisons GROUPING SET en double.

Pour les expressions de table communes récursives (requêtes WITH), PostgreSQL 14 ajoute les commodités syntaxiques de SEARCH et CYCLE pour aider respectivement à ordonner et à détecter les cycles.

Il y a aussi la nouvelle fonction date_bin dans PostgreSQL 14 qui peut a ligner les horodatages avec des intervalles spécifiés, une technique connue sous le nom de «binning».

SQL-Standard

Added SQL-standard SEARCH and CYCLE clauses for common table expressions, allow DISTINCT to be added to GROUP BY.

Administration

PostgreSQL 14 apporte de nombreuses améliorations à VACUUM, avec des optimisations orientées vers les index.

Autovacuum analyse désormais les tables partitionnées et peut propager des informations sur le nombre de lignes aux tables parentes.

Il existe également des gains de performances dans ANALYZE qui peuvent être contrôlés avec le paramètre maintenance_io_concurrency.

PostgreSQL 14 inclut de nombreuses améliorations sur les informations pouvant être surveillées, y compris la possibilité de suivre la progression de COPY en utilisant la vue pg_stat_progress_copy .

Cette version vous permet de suivre l’activité WAL à partir de la vue pg_stat_wal et d’inspecter les statistiques de l’emplacement de réplication à partir de la vue pg_stat_replication_slots .

Il existe plusieurs nouveaux paramètres dans PostgreSQL 14 pour aider à gérer les connexions. Ceux-ci incluent idle_session_timeout , qui peut fermer les connexions inactives après la période spécifiée, et le paramètre client_connection_check_interval qui permet à PostgreSQL d’annuler les longues requêtes en cours si un client se déconnecte

La commande REINDEX peut maintenant traiter tous les index enfants d’une table partitionnée, et PostgreSQL 14 ajoute l’utilitaire pg_amcheck pour aider à vérifier la corruption des données .

Autres nouveautés