La dernière et meilleure version de PostgreSQL, la v11, devrait sortir plus tard cette semaine ! Voici un aperçu des nouvelles fonctionnalités de cette version.
Améliorations du partitionnement
Le plus grand ensemble d'améliorations concerne la prise en charge des partitions. Postgres 11 prend en charge :
- la mise à jour des lignes peut les déplacer entre les partitions
- partitions par défaut
- création automatique d'index
- les contraintes de clé étrangère sont prises en charge sur les tables partitionnées
- index uniques
- poussée d'agrégation vers les partitions
- partition par hachage
- les partitions enfants sur les serveurs distants (postgres_fdw) peuvent être mises à jour
- INSERT..ON CONFLICT est pris en charge sur les tables partitionnées
- plans de requête plus efficaces et exécution plus rapide des requêtes
En savoir plus sur ces améliorations ici.
Plus de parallélisme
Il y a un tas d'améliorations à tous les niveaux liées à un parallélisme accru. Les jointures, les unions, la création de tables et de vues avec "CREATE..AS SELECT", la création d'index btree et bien plus encore bénéficient de ces changements.
Voici un article sur l'amélioration des performances de création d'index dans Postgres 11.
Requêtes conformes JIT
Bien que désactivée par défaut dans 11, la compilation JIT basée sur LLVM des requêtes est désormais intégrée à Postgres. Le serveur peut désormais choisir de compiler certaines requêtes (celles dont les estimations d'exécution sont supérieures à un seuil) à l'aide de LLVM, ce qui entraîne des requêtes plus rapides. Cette compilation est automatique et transparente pour l'application.
Voici quelques chiffres.
Index de couverture
Les index de couverture, disponibles dans d'autres SGBDR mais pas dans PostgreSQL, ont été ajoutés maintenant. Avec cela, il est possible d'avoir un index comme celui-ci (nouvelle syntaxe) :
CREATE INDEX empid_idx ON employees(empid) INCLUDE (empname);
Un tel index inclut des attributs supplémentaires (ici "empname") dans l'index lui-même, et permet de satisfaire des requêtes telles que :
SELECT empname FROM employees WHERE empid BETWEEN 1000 and 2000;
entièrement en utilisant des analyses d'index uniquement et sans toucher du tout au tas.
En savoir plus sur la couverture des index ici.
Procédures stockées
Les procédures stockées sont encore une autre instance de PostgreSQL qui rattrape les autres SGBDR. Elles sont bien sûr similaires aux fonctions stockées que PostgreSQL supporte depuis longtemps, mais la seule grande chose possible uniquement en utilisant les procédures est le contrôle des transactions. Vous pouvez valider et annuler des transactions à partir de procédures stockées.
Consultez la documentation CREATE PROCEDURE.
Ajouter des colonnes aux tableaux
Modifier une table pour ajouter une nouvelle colonne NOT NULL avec une valeur DEFAULT était un peu pénible dans PostgreSQL, car cela obligeait le serveur à réécrire toute la table. Avec la v11, il est désormais possible d'avoir des instructions DDL comme ceci :
ALTER TABLE users ADD COLUMN foo_factor integer NOT NULL DEFAULT 42;
exécuter en temps constant. Les lignes ne sont pas modifiées lors de l'exécution et sont à la place mises à jour "paresseusement".
En savoir plus sur cette fonctionnalité ici.
Fonctions SHA
Et enfin, ceux d'entre vous qui n'ont utilisé pgcrypto que pour les fonctions SHA peuvent désormais passer à celles intégrées à PostgreSQL 11 :
bench=# \df pg_catalog.sha*
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+--------+------------------+---------------------+------
pg_catalog | sha224 | bytea | bytea | func
pg_catalog | sha256 | bytea | bytea | func
pg_catalog | sha384 | bytea | bytea | func
pg_catalog | sha512 | bytea | bytea | func
(4 rows)
bench=# SELECT sha256('hello');
sha256
--------------------------------------------------------------------
\x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
(1 row)