PostgreSQL 11, la version Beta est déjà disponible !

La version 11 de PostgreSQL, prochaine version majeure, est en version beta2.
Même si la sortie de la version de production n’est pas encore officiellement annoncée,mais on devrait pouvoir disposer de cette nouvelle version majeure courant du 3ème semestre 2018.
Les principales améliorations portent sur le parallélisme, le partitionnement et l’indexation.
En voici une présentation succincte.
 
 

Améliorations majeures du partitionnement

Le partitionnement est maintenant possible par une clé de hachage.

Les instructions UPDATE qui modifient une clé de partition déplacent maintenant les lignes affectées vers les partitions appropriées.

Amélioration des performances des requêtes SELECT grâce à l’élimination améliorée des partitions lors du traitement et de l’exécution des requêtes.

Prise en charge de PRIMARY KEY, FOREIGN KEY, des index et des déclencheurs sur les tables partitionnées.

Possibilité de mettre en place une partition par défaut sur une table partitionnée. La partition par défaut peut stocker les lignes qui ne correspondent à aucune des autres partitions définies et est recherchée en conséquence.

Possibilité les index UNIQUES sur les tables partitionnées si la clé de partition garantit l’unicité.

La création automatique d’index sur une table partitionnée dans toutes les partitions enfants est mise en place.

On peut mettre en place des clés étrangères sur les tables partitionnées.

L’utilisation des instructions INSERT, UPDATE et COPY sur les tables partitionnées pour router correctement les lignes vers des partitions étrangères.

On peut maintenant mettre en place les déclencheurs FOR EACH ROW sur les tables partitionnées.
La création d’un déclencheur sur les tables partitionnées crée automatiquement des déclencheurs sur toutes les partitions et sur celles nouvellement créées. Cela permet également des contraintes uniques différées sur les tables partitionnées.

On a la possibilité d’effectuer de l’agrégation sur chaque partition, puis de fusionner les résultats. Cette fonctionnalité est désactivée par défaut mais peut être activée en changeant le paramètre suivant : enable_partitionwise_agrgregate

Avec postgres_fdw, on a la possibilité de faire descendre les agrégats vers des tables étrangères qui sont des partitions.

 

Améliorations du parallélisme

Les jointures de hachage sont effectuées en parallèle à l’aide d’une table de hachage partagée.

Les instruction CREATE INDEX sont parallélisées dans le cas d’index B-tree.

L’instruction UNION exécute chaque SELECT en parallèle si les SELECT individuels ne peuvent pas être parallélisés.

L’analyses des partitions utilise plus efficacement les process « parallel workers ».

L’instruction LIMIT est transmise aux process « parallel worker ». Cela permet ces process de réduire les résultats renvoyés et d’effectuer des « index scans » plus ciblés.

Les instructions CREATE TABLE .. AS, CREATE MATERIALIZED VIEW et certaines requêtes utilisant UNION sont désormais parallélisées.

Amélioration des performances des « sequential scans » avec de nombreux process « parallel workers ».

L’activité de tri effectuée par les process « parallel worker » est remontée dans les explain plans.

Ajout d’une clause INCLUDE lors de la création de l’index.
La clause facultative INCLUDE spécifie une liste de colonnes qui seront incluses en tant que partie non-clé dans l’index. Les colonnes INCLUDE existent uniquement pour permettre à davantage de requêtes de bénéficier de « index-only scans » en incluant les valeurs des colonnes spécifiées dans l’index. Ces valeurs devraient sinon être obtenues en lisant la table.

Garde en mémoire la page d’index btree la plus élevée pour optimiser les futurs ajouts dans l’index.

On peut scanner toutes les pages d’index de hachage. Jusqu’à maintenant, pour chaque entrée d’index de hachage, il fallait d’abord redéfinir sa position dans la page. Cela réduit le trafic de verrouillage / déverrouillage.

Ajouter un verrouillage pour les indexes de type hash, GiST et GIN. Cela réduit la probabilité de conflits de sérialisation.

 

Autres améliorations, pêle-mêle

Des procédures stockées peuvent être créées avec prise en charge des transactions intégrées.

La compilation JIT du code SQL, incluant la prise en charge de l’évaluation rapide des expressions.

Les fonctions WINDOW prennent désormais en charge toutes les options présentées dans la norme SQL 2011, y compris les options RANGE distance PRECEDING / FOLLOWING, GROUPS et les options d’exclusion de trame.

La connexion avec l’authentification SCRAM, afin d’empêcher les attaques man-in-the-middle potentielles sur les connexions à la base de données.

 
Et beaucoup d’autres améliorations de performances utiles, y compris la création de ALTER TABLE … ADD COLUMN avec une colonne non nulle par défaut plus rapide.