Malgré des actualités plutôt moroses au Botswana concernant nos chers éléphants, il y en a un qui se porte bien et est encore plus fort à savoir PostgreSQL qui sort en version 13 stable ce jeudi 24 septembre 2020. 

Après seulement 3 versions Bêta et une RC le voilà dans les starting blocks pour débarquer sur vos serveurs ! Et comme à chaque nouvelle version son lot de nouveautés.

Un petit rappel qui peut parfois éviter bien des catastrophes, si vous avez prévu de migrer vers PostgreSQL 13, vous devriez jeter un oeil sur les potentielles incompatibilités avec les précédentes versions  (et aussi sur les versions intermédiaires si vous faite un gap de plusieurs versions d’un coup), il est toujours préférable d’identifier ces légers changements en amont plutôt qu’une fois en production. Mais rassurez-vous, dans cette version pas de quoi freiner significativement une migration.

# Partitionnement

Des améliorations sont ajoutées sur le partitionnement de tables, tant au niveau performance avec l’ajout de cas où une jointure directe entre partition peut être utilisée dans une requête, mais aussi de fonctionnalités telles que  la gestion des triggers avec le support de la clause BEFORE ou bien encore la réplication logique sans avoir besoin de publier chaque partition.

# Index

Là aussi des améliorations de performances mais aussi des gains d’espace disque sur les index B-tree surtout pour ceux contenant des doublons, mais si vous passez par un pg_upgrade il voudra passer par un reindex pour bénéficier de ces changements.

# Planificateur

Le planificateur de requête PostgreSQL a lui aussi eu le droit à quelques améliorations notamment au niveau des statistiques ce qui peut améliorer les plans d’exécution et donc les performances.

# Performance générale

Les performances ne sont pas en reste dans cette nouvelle version, avec l’ajout du tri incrémentiel ce qui accélère le tri des données dans certains cas,  sur les agrégations de hachage qui peuvent désormais utiliser le stockage sur disque dans le cadre de grands ensembles d’agrégation, sur la conversion de type entier vers texte.

# Vues système

De nouvelles vues système font leur apparition :

la vue pg_stat_activity se voit elle ajoutée une colonne leader_pid ce qui permet de retrouver rapidement tous les processus impliqués dans une requête parallèle.

# Fonctionnalités

  • ajout de la fonctionnalité FETCH FIRST WITH TIES (vous trouverez ici un exemple)
  • Ajout de la fonction gen_random_uuid() utilisable sans activer d’extensions
  • Ajout de la possibilité de renommer une colonne d’une vue :
  • Ajout de la fonction .datetime() dans les jsonpath pour convertir automatique une chaîne en date ou horodatage

# Client psql

  • Ajout de nouvelles commandes pour afficher la description de classe d’opérateur et famille d’opérateur
    • \dAc\dAf\dAo, et \dAp.
  • Ajout du statut de la transaction dans le prompt 
    • * dans une transaction
    • ! dans un échec de transaction
    • ? pour un état indéterminé de la transaction

# Administration

  • Ajout de la capacité de la commande VACUUM à traiter des index en parallèle
  • la commande reindexdb peut aussi paralléliser les tâches
  • introduction de la notion de « trusted extension » qui permet à un super utilisateur de définir les extensions qu’un utilisateur a le droit d’installer dans sa base de données en ayant le droit CREATE.
  • Ajout pour pg_dump de l’option –include-foreign-data pour inclure dans la sauvegarde les données de serveurs distants

La liste des nouveautés dans cette version est grande, toutes les nouveautés n’ont pas été abordées mais vous pouvez bien sur les retrouver dans la note de version. Le focus a surtout été fait sur le côté utilisateur plutôt qu’administrateur de PostgreSQL.