AprÚs un an de développement, une nouvelle branche stable de la base de données PostgreSQL 14 est publiée. Des mises à jour pour cette nouvelle branche seront publiées pendant cinq ans jusqu'en novembre 2026.
Les principales nouveautés :
- Ajout du support de l'accĂšs aux donnĂ©es JSON Ă l'aide d'expressions, similaire Ă la manipulation de tableaux : SELECT (â{ «postgres»: { «release»: 14 }}â::jsonb)[âpostgresâ][âreleaseâ]; SELECT * FROM test WHERE details[âattributesâ][âsizeâ] = â»medium»â;
Une syntaxe similaire a Ă©tĂ© mise en Ćuvre pour les donnĂ©es au format clĂ©/valeur fournies par le type hstore. Une telle syntaxe a Ă©tĂ© initialement mise en Ćuvre Ă l'aide d'un framework universel, qui pourra Ă l'avenir ĂȘtre utilisĂ© pour d'autres types. Exemple pour le type hstore : INSERT INTO mytable VALUES (âa=>b, c=>dâ); SELECT h[âaâ] FROM mytable; UPDATE mytable SET h[âcâ] = ânewâ;
- La famille de types pour la dĂ©finition de plages a Ă©tĂ© Ă©largie avec de nouveaux types «multirange», permettant de dĂ©finir des listes ordonnĂ©es de plages de valeurs non chevauchantes. En plus de chaque type de range existant, un type multirange correspondant a Ă©tĂ© proposĂ©, par exemple, le type «int4range» correspond à «int4multirange», et «daterange» à «datemultirange». L'utilisation de nouveaux types simplifie la formulation des requĂȘtes manipulant des sĂ©quences complexes de plages. SELECT â{[3,7), [8,9)}â::int4multirange; SELECT nummultirange(numrange(1.0, 14.0), numrange(20.0, 25.0));
- Des optimisations ont été apportées pour améliorer les performances des systÚmes fortement chargés traitant un grand nombre de connexions. Certains tests montrent un doublement des performances.
- L'efficacité des index B-tree a été améliorée et un problÚme de croissance des index lors de mises à jour fréquentes des tables a été résolu.
- Ajout du support d'un mode de transmission de requĂȘtes en pipeline fonctionnant cĂŽtĂ© client (rĂ©alisĂ© au niveau de libpq), permettant d'accĂ©lĂ©rer considĂ©rablement les scĂ©narios de travail avec la base de donnĂ©es liĂ©s Ă l'exĂ©cution d'un grand nombre de petites opĂ©rations d'insertion (INSERT/UPDATE/DELETE) en envoyant la requĂȘte suivante sans attendre le rĂ©sultat de la prĂ©cĂ©dente. Ce mode aide Ă©galement Ă accĂ©lĂ©rer le travail lors de connexions avec de grandes latences de livraison de paquets.
- Les capacités pour des configurations distribuées incluant plusieurs ont été élargies. serveurs PostgreSQL. Dans l'implémentation de la réplication logique, il est désormais possible d'envoyer en mode flux des transactions en cours d'exécution, ce qui permet d'améliorer considérablement les performances de la réplication des grosses transactions. De plus, le décodage logique des données en cours de réplication logique a été optimisé.
- Le mĂ©canisme de connexion des tables externes Foreign Data Wrapper (postgres_fdw) a Ă©tĂ© amĂ©liorĂ© pour prendre en charge le traitement parallĂ©lisĂ© des requĂȘtes, qui est actuellement applicable uniquement lors de la connexion Ă d'autres serveurs PostgreSQL. Dans postgres_fdw, la prise en charge de l'ajout de donnĂ©es dans des tables externes en mode batch et la possibilitĂ© d'importer des tables partitionnĂ©es via la directive « IMPORT FOREIGN SCHEMA » ont Ă©galement Ă©tĂ© ajoutĂ©es.
- Des optimisations ont été apportées à l'implémentation de l'opération VACUUM (ramassage de déchets et réorganisation du stockage sur disque). Un mode de nettoyage d'urgence (« emergency mode ») a été ajoutée, en sautant les opérations de nettoyage non essentielles, si les conditions de passage à un deuxiÚme tour d'identifiants de transaction (transaction ID wraparound) sont remplies. Les frais généraux liés au traitement des index au format B-Tree ont été réduits. L'exécution de l'opération « ANALYZE », qui collecte des statistiques sur le fonctionnement de la base de données, a été considérablement accélérée.
- La possibilitĂ© de configurer la mĂ©thode de compression utilisĂ©e dans le systĂšme TOAST, chargĂ© du stockage de grandes donnĂ©es telles que des blocs de texte ou des informations gĂ©omĂ©triques, a Ă©tĂ© ajoutĂ©e. En plus de la mĂ©thode de compression pglz, l'algorithme LZ4 peut dĂ©sormais Ă©galement ĂȘtre utilisĂ© dans TOAST.
- Les outils de surveillance du fonctionnement du SGBD ont Ă©tĂ© Ă©largis. Des vues pour suivre l'avancement des commandes « COPY » (pg_stat_progress_copy), des statistiques sur les slots de rĂ©plication (pg_stat_replication_slots) et des activitĂ©s liĂ©es au journal WAL des transactions (pg_stat_wal) ont Ă©tĂ© ajoutĂ©es. La fonction compute_query_id a Ă©tĂ© ajoutĂ©e, intĂ©grant dans diverse sous-systĂšmes, tels que pg_stat_activity et EXPLAIN VERBOSE, le suivi des requĂȘtes en leur attribuant un identifiant unique pour chaque requĂȘte.
- Des optimisations ont Ă©tĂ© ajoutĂ©es au planificateur de requĂȘtes, amĂ©liorant le traitement parallĂšle des requĂȘtes et permettant d'augmenter la performance de l'exĂ©cution simultanĂ©e des opĂ©rations de balayage sĂ©quentiel des enregistrements, du lancement parallĂšle des requĂȘtes en PL/pgSQL Ă l'aide de la commande « RETURN QUERY » et de l'exĂ©cution parallĂšle des requĂȘtes dans « REFRESH MATERIALIZED VIEW ». Pour amĂ©liorer les performances des jointures rĂ©cursives, un support pour la mise en cache supplĂ©mentaire a Ă©tĂ© mis en Ćuvre.
- Pour optimiser les expressions, des statistiques avancĂ©es peuvent dĂ©sormais ĂȘtre utilisĂ©es, et pour optimiser les fonctions de fenĂȘtre, un tri incrĂ©mental a Ă©tĂ© introduit.
- Dans les procédures stockées, permettant de gérer les transactions dans des blocs de code, un support pour la définition des données retournées à l'aide des paramÚtres « OUT » a été mis en place.
- La fonction date_bin a Ă©tĂ© ajoutĂ©e pour arrondir les valeurs de type timestamp en fonction de l'intervalle spĂ©cifiĂ©. SELECT date_bin(â15 minutesâ, TIMESTAMP â2020-02-11 15:44:17â, TIMESTAMP â2001-01-01â); 2020-02-11 15:30:00
- Des expressions SEARCH et CYCLE, définies par la norme SQL, ont été ajoutées, simplifiant l'ordonnancement et l'identification des cycles dans les expressions de table communes récursives (Common Table Expression, CTE). WITH RECURSIVE search_tree(id, link, data) AS ( SELECT t.id, t.link, t.data FROM tree t UNION ALL SELECT t.id, t.link, t.data FROM tree t, search_tree st WHERE t.id = st.link ) SEARCH DEPTH FIRST BY id SET ordercol SELECT * FROM search_tree ORDER BY ordercol;
- Dans l'utilitaire psql, l'auto-complétion des commandes par tabulation a été améliorée, la commande « \df » permet maintenant d'afficher les arguments des fonctions, et la statistique affichée par la commande « \dX » a été élargie.
- Il est dĂ©sormais possible d'accorder aux utilisateurs des privilĂšges autorisant uniquement la lecture ou uniquement l'Ă©criture. Les privilĂšges peuvent ĂȘtre attribuĂ©s Ă des tables, des vues et des schĂ©mas spĂ©cifiques Ă l'aide des rĂŽles prĂ©dĂ©finis pg_read_all_data et pg_write_all_data. GRANT pg_read_all_data TO user1;
- Pour les nouvelles installations, l'authentification par mot de passe utilise par dĂ©faut le schĂ©ma SCRAM-SHA-256 au lieu de md5 (le paramĂštre « password_encryption » dans la gĂ©nĂ©ration de postgresql.conf est dĂ©sormais rĂ©glĂ© sur âscram-sha-256â).
Source : opennet.ru
