LOXODATA

PostgreSQL 12 en bêta

2019-05-23   1405 mots, 7 minutes de lecture

PostgreSQL 12 Bêta 1 publiée

Le PostgreSQL Global Development Group annonce la disponibilité de la première bêta de PostgreSQL 12. Cette publication contient un aperçu de toutes les fonctionnalités qui seront disponibles dans la version finale de PostgreSQL 12. Des modifications peuvent toutefois intervenir d’ici là.

Dans l’esprit de la communauté open source PostgreSQL, nous vous encourageons fortement à tester les nouvelles fonctionnalités de PostgreSQL dans vos systèmes de base de données. Ceci afin de nous aider à éliminer les bogues et autres problèmes qui pourraient exister. Bien que nous ne vous conseillons pas de faire fonctionner PostgreSQL 12 Bêta 1 dans vos environnements de production, nous vous encourageons à trouver des moyens de faire fonctionner votre charge applicative typique avec cette publication bêta.

Vos tests et vos commentaires aideront la communauté à s’assurer que PostgreSQL 12 respecte nos standards de stabilité et fiablité.

Principales fonctionnalités de PostgreSQL 12

Performance d’indexation, Fonctionnalités et Administration

PostgreSQL 12 améliore les performances globales des index B-tree standards, tout en améliorant également la gestion globale de l’espace de ces index. Ces améliorations fournissent aussi une réduction globale de la taille des index B-tree fréquemment modifiés, ainsi qu’un gain de performances.

De plus, PostgreSQL 12 ajoute la possibilité de reconstruire les index de façon concurrente, ce qui permet de faire une opération REINDEX sans bloquer de requêtes sur cet index. Cette fonctionnalité devrait aider dans le cas de reconstructions longues qui pouvaient causer des indisponibilités dans le cadre de l’administration d’une base de données de production.

PostgreSQL 12 étend les possibilités de plusieurs mécanismes d’indexation spécialisés. La possibilité de créer des index couvrants (covering index), c.-à-d. la clause INCLUDE qui a été ajoutée dans PostgreSQL 11, est désormais ajoutée pour les index GiST. Les index SP-GiST permettent maintenant d’effectuer des recherches dites « plus proche voisin » (K-NN) pour les types de données supportant l’opérateur de distance (<->).

La quantité de données supplémentaires écrites dans les journaux de transactions (WAL) lors de la création d’un index GiST, GIN ou SP-GiST a été significativement réduite dans PostgreSQL 12. L’utilisation globale des disques d’une instance PostgreSQL en bénéficie, de même que les fonctionnalités comme l’archivage continu ou la réplication en flux.

Requêtes WITH en ligne (Common table expressions)

Les requêtes CTE (requêtes WITH) peuvent maintenant automatiquement être exécutées en ligne si elles sont : a) non récursives b) n’ont pas d’effet de bord c) sont référencées une seule fois dans le reste de la requête. Ceci supprime la barrière d’optimisation connue depuis l’introduction de la clause WITH dans PostgreSQL 8.4.

Vous pouvez forcer une requête WITH à être exécutée en ligne en utilisant la clause NOT MATERIALIZED, par exemple :

WITH c AS MATERIALIZED (
    SELECT * FROM a WHERE a.x % 4 = 0
)
SELECT * FROM c JOIN d ON d.y = c.x;

Partitionnement

PostgreSQL 12 améliore le traitement de tables partitionnées ayant des milliers de partitions pour les opérations ne nécessitant qu’un petit nombre de partitions.

PostgreSQL 12 amène aussi des améliorations des performances des commandes INSERT et COPY sur une table partitionnée. ATTACH PARTITION peut maintenant être exécuté sans verrouiller les requêtes concurrentes sur la table partitionnée. Enfin, il est possible d’utiliser des clés étrangères référençant une table partitionnée dans PostgreSQL 12.

Requêtes JSON path selon la norme SQL/JSON

PostgreSQL 12 permet maintenant l’exécution de requêtes JSON path selon la spécification SQL/JSON de la norme SQL:2016. De façon similaire aux expressions XPath pour XML, les expressions JSON path permettent d’évaluer des expressions arithmétiques et fonctions ainsi que des comparaisons de valeurs dans les documents JSON.

Un sous-ensemble de ces expressions peut être accéléré avec les index GIN, permettant des recherches très performantes sur des données JSON.

Collations

PostgreSQL 12 supporte maintenant les collations insensible à la casse et insensible aux accents pour les collations fournies par ICU, aussi connues sous le nom de collations non déterministes. Lorsqu’elles sont utilisées, ces collations facilitent les tris et les comparaisons, mais peuvent aussi entrainer des coûts supplémentaires si la collation nécessite des vérifications supplémentaires sur la chaîne de caractères.

Valeurs les plus communes dans les statistiques étendues

CREATE STATISTICS, a été introduit dans PostgreSQL 10 pour aider à collecter des statistiques plus complètes sur des colonnes multiples. Ceci a permis d’améliorer les plans d’exécution des requêtes. Cette fonction supporte maintenant les statistiques sur les valeurs les plus communes. Ainsi les plans d’exécution seront meilleurs pour des distributions de valeurs non uniformes.

Colonnes générées

PostgreSQL permet la création de colonnes générées calculant leurs valeurs en se basant sur le contenu d’autres colonnes.

Cette fonctionnalité fournit deux types de colonnes générées :

  • les colonnes générées stockées, calculées à l’insertion et à la mise à jour, et enregistrées sur le disque ;
  • les colonnes générées virtuelles, calculées à la lecture de la colonne, comme une partie de la requête. Celles-ci ne sont cependant pas encore implantées.

Interface au stockage de tables

PostgreSQL 12 introduit une interface au stockage de table, permettant la création et l’utilisation de mécanismes de stockages différents pour les tables. De nouvelles méthodes d’accès peuvent être ajoutées en utilisant l’ordre CREATE ACCESS METHOD et par la suite utilisé par les tables par la nouvelle clause USING de l’ordre CREATE TABLE.

Une interface de stockage des tables peut être définie en créant une nouvelle méthode d’accès aux tables.

Dans PostgreSQL 12, l’interface de stockage utilisée par défaut est la méthode d’accès heap, qui est en fait la seule supportée nativement.

Somme de contrôle des pages

La commande pg_verify_checkums est renommée pg_checksums et supporte maintenant l’activation et la désactivation des sommes de contrôle pour une instance PostgreSQL à froid. Auparavant, les sommes de contrôles des pages ne pouvaient être activées qu’à l’initialisation d’une instance avec initdb.

Authentification et sécurisation des connexions

GSSAPI supporte maintenant le chiffrement côté client et serveur. Il peut être spécifié dans le fichier pg_hba.conf en utilisant les types d’enregistrement hostgssenc et hostnogssenc.

PostgreSQL 12 autorise également la découverte des serveurs LDAP en se basant sur les enregistrements DNS SRV si PostgreSQL est compilé avec OpenLDAP.

Changement de comportement notable

Plusieurs changements dans PostgreSQL 12 peuvent affecter le comportement et l’administration des opérations. Quelques-uns sont notés ci-dessous. Pour plus d’informations sur les autres changements, veuillez consulter la section « Migrer vers PostgreSQL » de la note de publication.

  1. Le fichier de configuration recovery.conf est désormais fusionné dans le fichier principal postgresql.conf. L’instance PostgreSQL ne démarre pas si elle détecte la présence du fichier recovery.conf. Pour mettre une instance PostgreSQL en mode non primaire, il faut utiliser les fichiers recovery.signal et standby.signal. Plus d’information sur la restauration d’archive ici :
    https://www.postgresql.org/docs/devel/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY

  2. La compilation Just-in-Time (JIT) est maintenant activée par défaut.

  3. Les OIDs ne peuvent plus être ajoutés aux tables utilisateurs avec la clause WITH OIDs. Il est nécessaire d’effectuer des ajustements sur les tables contenant des colonnes nommées « OID ».
    Lancer un SELECT * sur une table système fait désormais apparaître l’OID. L’ancien fonctionnement nécessitait que la colonne soit explicitement nommée.

Fonctionnalités supplémentaires

De nombreuses autres fonctionnalités et améliorations ont été ajoutées à PostgreSQL. En fonction des cas d’usages, leur importance peut paraître plus ou moins grande que celles mentionnées ci-dessus.

Vous pouvez consulter les notes de publications pour une liste complète des nouveautés et changements.

Tests pour le débogage et la compatibilité

La stabilité de chaque publication de PostgreSQL dépend de vous, la communauté. En testant la version à venir avec votre charge et vos outils de tests, vous pourrez nous aider à trouver les bogues et régressions avant la publication de PostgreSQL 12.

Étant donné qu’il s’agit d’une version bêta, des changements mineurs dans le comportement de la base de données, des détails et des APIs sont toujours possibles. Vos retours et tests aideront à déterminer les ajustements finaux des nouvelles fonctionnalités.

La qualité des tests aide à déterminer le moment de la publication finale.

Une liste des problèmes ouverts est publiquement disponible dans le wiki de PostgreSQL. Vous pouvez rapporter des bogues en utilisant le formulaire présent sur le site web de PostgreSQL : https://www.postgresql.org/account/submitbug/

Planning Bêta

Il s’agit de la première publication bêta de la version 12. Le projet PostgreSQL publiera autant de bêtas que nécessaires pour tester. Celles-ci seront suivies par une ou plusieurs publications de versions candidates, jusqu’à la publication de la version finale à la fin de l’année 2019.

Pour plus d’information, veuillez consulter la page Beta Testing.