URL: https://linuxfr.org/news/postgresql-11-0 Title: PostgreSQL 11.0 Authors: claudex Snark, ZeroHeure, Davy Defaud, BAud, Julien Jorge, NeoX, palm123 et Nils Ratusznik Date: 2018年10月20日T11:35:27+02:00 License: CC By-SA Tags: postgresql et base_de_données Score: 64 PostgreSQL est un système de gestion de base de données relationnelle. La version 11 est sortie ce 18 octobre 2018.  Les principales nouveautés, détaillées en seconde partie de la dépêche, se sont concentrées sur la gestion des bases ayant un très gros volume de données. ---- [PostgreSQL](https://www.postgresql.org) [L’annonce pour la presse](https://www.postgresql.org/about/news/1894/) [Les notes de versions détaillées](https://www.postgresql.org/docs/11/static/release-11.html) ---- # Amélioration du partitionnement PostgreSQL permet déjà le partitionnement depuis longtemps, il s’agit de stocker dans plusieurs tables distinctes des données qui sont logiquement dans une seule table. L’utilisateur de la base ne voit pas cette répartition et cela permet de stocker des données sur plusieurs systèmes de fichiers afin d’avoir des caractéristiques différentes en fonction des données. Par exemple, les données récentes sont stockées sur SSD et les données plus anciennes sont stockées sur disque dur. Il était possible de faire des partitions sur des listes de données ou sur des intervalles. Il est maintenant possible de faire des partitions sur un _hash_ de la clef afin de répartir les données de manière aléatoire. Ceci permet de répartir les opérations de lecture et écriture sur plusieurs stockages. Il est aussi possible d’avoir une table *catch‐all* pour les partitions afin de récupérer les données qui ne se retrouvent dans aucune des autres tables. Les clefs primaires et étrangères ainsi que les index et les déclencheurs (*triggers*) peuvent être maintenant déclarés au niveau de la table principale et seront répercutés sur toutes les tables membres de la partition. PostgreSQL peut aussi dorénavant changer les données de partition automatiquement si la clef de répartition est modifiée. Les performances de lecture des tables partitionnées ont aussi été améliorées avec une nouvelle stratégie d’élimination des partitions. La fonctionnalité *[UPSERT](https://linuxfr.org/users/n_e/journaux/upsert-dans-postgresql-ca-dechire)* est maintenant disponible pour les tables partitionnées. # Disponibilité des transactions dans les procédures stockées Les procédures stockées sont disponibles dans PostgreSQL depuis longtemps, mais il n’était pas possible, jusqu’à présent, d’y créer des transactions. C’est désormais possible. Voici un exemple avec PL/Python : ```Python CREATE PROCEDURE transaction_test1() LANGUAGE plpythonu AS $$ for i in range(0, 10): plpy.execute("INSERT INTO test1 (a) VALUES (%d)" % i) if i % 2 == 0: plpy.commit() else: plpy.rollback() $$; CALL transaction_test1(); ``` # Amélioration des performances ## Parallélisme Plusieurs opérations peuvent maintenant êtres faites en parallèle pour profiter des nombreux cœurs des processeurs actuels. Ainsi, les tables partitionnées peuvent être lues en parallèle mais aussi lorsqu’une requête *SELECT* inclut une clause *UNION*. La création d’index est aussi parallélisée, ainsi que d’autres commande DDL (_Data Definition Language_) comme *CREATE TABLE* ou *CREATE MATERIALIZED VIEW*. ## Compilation à la volée Un compilateur à la volée (*Just in Time*) optionnel est maintenant disponible. Il permet d’optimiser les requêtes complexes pour améliorer leur vitesse d’exécution. PostgreSQL utilise pour cela le compilateur LLVM. Pour l’activer, il faut ajouter `jit = on` dans le fichier de configuration ou bien définir la variable de session `SET jit = on`. ## Simplification = rapidité Il n’est plus nécessaire de réécrire toute la table quand l’appel *ALTER TABLE ... ADD COLUMN ... DEFAULT ...* avec une valeur par défaut qui n’est pas *NULL* est fait. Cela améliore beaucoup la vitesse d’exécution de cette commande, si la table est de taille importante. # Expérience utilisateur Les mots clefs `quit` et `exit` sont maintenant reconnus par l’interface en ligne de commande (psql) pour terminer le processus, en plus de `\q` (enfin !).