Après seulement une release candidate (mais auparavant 4 version bêta), PostgreSQL 11 vient de sortir!!!! Et comme à chaque nouvelle version son lot de nouveautés que nous allons essayer de passer rapidement en revue.

# Amélioration de la parallélisation

Quoi de mieux que de commencer le tour des nouveautés par un sujet que l’on a abordé lors du PG Day France 2018

PostgreSQL 11 va encore plus loin dans la parallélisation avec :

    • Création d’index B-tree en parallèle
    • Parallélisation des UNION ALL
    • Amélioration du Parallel hash join (paralléliser le remplissage d’une seule table de hachage, partagée) et parallelized sequential scans
    • Parallélisation sur la création de vue matérialisée et table à partir des résultats d’une requête

  • Ajout d’un paramètre de configuration du serveur « parallel_leader_participation » qui permet de contrôler si le processus leader participe à l’exécution des sous plans d’exécution

# Amélioration du partitionnement

    • La possibilité de partitionner une table par hashage de clé (en plus des autres)

    • Ajout possible d’une partition par défaut pour les données ne correspondant à aucune partition

    • La possibilité de créer des clés primaires, clés étrangères, index et triggers qui seront automatiquement applicables sur l’ensemble des partitions
    • Support du changement automatique de partition en cas de mise à jour de la clé de partitionnement
    • Amélioration des performances lors des SELECT sur la lecture des partitions
    • Support des upsert sur les tables partitionnées

# Gestion des transactions dans les procédures stockées

PostgreSQL 11 introduit la possibilité de créer des procédures (en PL/pgSQL, PL/Perl, PL/Python, et PL/Tcl). Depuis de nombreuses années, il est possible dans PostgreSQL de créer des fonctions et bien ici ça y ressemble fortement, sauf que l’on ne retourne pas de résultats et que l’on peut gérer les transactions !

L’exécution de ces procédures se fait en utilisant la commande CALL

# Compilation JIT

PostgreSQL 11 introduit le support de la compilation Just-in-Time (JIT) pour optimiser l’exécution de code et d’autres opérations. Utilisant des composants du projet LLVM, l’introduction de JIT dans PostgreSQL accélère les requêtes utilisant des expressions, listes, agrégats, projections, ainsi que certaines opérations internes.

Pour pouvoir utiliser la compilation JIT, vous devrez installer la dépendance LLVM puis activer la compilation JIT soit dans le fichier de configuration (jit = on), soit durant votre session en exécutant SET jit = on.

La compilation JIT bénéficie surtout aux requêtes de longue durée et limitées par le processeur. Ce seront souvent des requêtes analytiques (OLAP). Pour les requêtes courtes, le surcoût apporté par la compilation JIT sera souvent supérieur au temps qu’elle permet de gagner.

# Améliorations générales SQL

    • Support de toutes les clauses (SQL:2011) dans les fonctions de fenêtrage ce qui permet maintenant l’utilisation de RANGE dans des clauses PRECEDING/FOLLOWING, GROUPS ou d’exclusion

    • Ajout de fonctions de hash sha-2 : sha224(), sha256(), sha384() et sha512()
    • Ajout de fonctions de recherche plein texte : json(b)_to_tsvector() et websearch_to_tsquery()
    • Ajout de l’opérateur ^@ identique à LIKE ‘mot%’ mais plus efficace sur un index b-tree

    • Amélioration des index avec l’ajout du mot clef INCLUDE, qui permet d’indiquer une liste de colonnes qui seront incluses dans l’index comme des colonnes non clés. L’ajout de colonnes dans la création d’index permet alors l’utilisation de parcours d’index couvrants.

  • Amélioration de l’ordre ALTER TABLE .. ADD COLUMN .. DEFAULT .. avec une valeur par défaut non NULL n’a plus besoin de réécrire entièrement la table lors de son exécution, ce qui entraîne une grosse amélioration des performances.

# Authentification

  • Ajout de l’authentification LDAP, mais celle ci n’est utilisée que pour valider les paires nom d’utilisateur/mot de passe. De ce fait, pour pouvoir utiliser LDAP comme méthode d’authentification, l’utilisateur doit préalablement exister dans la base.

# psql

Le client psql évolue lui aussi :

    • Ajout des commandes « quit » et « exit » dans le client psql… (fini les personnes prisent de panique pour sortir de leur terminal ??? )

    • Ajout de la commande \gdesc pour afficher les noms et types de colonnes du résultat de la requête
    • Ajout de variables pour les erreurs et activités des requêtes ERROR, SQLSTATE, ROW_COUNT, LAST_ERROR_MESSAGE, and LAST_ERROR_SQLSTATE.
    • Ajout de la possibilité de tester l’existence d’une variable par exemple dans un if

  • Amélioration de la complétion dans l’écriture de requêtes

En dehors de ces nouveautés en terme d’utilisation, cette nouvelle version apporte aussi des améliorations de performance et d’utilisation de mémoire.

Et voilà, nous avons fini notre petit tour rapide des nouveautés de postgreSQL 11, mais ne vous inquiétez pas une version 12 est déjà en préparation pour le troisième trimestre 2019.