Nouveautés de PostgreSQL 14

PGSession 14

Dalibo & Contributors

# Nouveautés de PostgreSQL 14

La v14

  • Développement depuis le 7 juin 2020
  • Sortie le 30 septembre 2021
  • version 14.1 sortie le 12 novembre 2021

Les nouveautés

  • Administration et maintenance
  • Réplication
  • Sharding
  • Développement et syntaxe SQL
  • Supervision
  • Performances

Administration et maintenance

  • Sécurité
  • Nouveautés de configuration (GUC)
  • Partitionnement
  • Divers

Sécurité

Authentification SCRAM-SHA-256 par défaut

Défaut à présent : password_encryption = scram-sha-256

  • Utilisation conseillée depuis la version 10 !
  • Migration :
    • utilisateur par utilisateur
    • SET password_encryption TO "scram-sha-256" ;
    • ré-entrer le mot de passe
    • dans pg_hba.conf : md5 → scram-sha-256

Nouveaux rôles prédéfinis

  • pg_read_all_data
  • pg_write_all_data
  • pg_database_owner (template)

Nouveautés de configuration (GUC)

Temps d’attente maximal pour une session inactive

  • Nouveau paramètre idle_session_timeout
  • Temps d’attente avant d’interrompre une session inactive
    • Désactivé par défaut (valeur 0)
    • Comportement voisin de idle_in_transaction_session_timeout
    • Paramètre de session, ou globalement pour l’instance

Modification à chaud de la restore_command

  • Le paramètre restore_command ne nécessite plus de redémarrage
  • Applicable pour les instances secondaires

Détection des déconnexions pendant l’exécution d’une requête

  • Nouveau paramètre client_connection_check_interval
  • Détermine le délai entre deux contrôles de connexion
    • Désactivé par défaut (valeur 0)
    • Utile pour les très longues requêtes
    • Repose sur des appels système non standards (non définis par POSIX)
      • donc Linux uniquement

Partionnement

Nouveautés sur REINDEX et reindexdb

  • REINDEX est maintenant disponible pour les tables et index partitionnés
  • Supporte la clause CONCURRENTLY
  • Fonctionne en mode multi-transactions

Divers

Compression des toast configurable en LZ4 et PGLZ

  • Il est maintenant possible de compresser les données TOAST avec LZ4
  • Plusieurs niveaux de définition (global ou par colonne)
  • LZ4 est sensiblement plus rapide
  • PGLZ a un meilleur taux de compression
  • Nouvelle option --no-toast-compression pour pg_dump

Réplication

  • Réplication physique
  • Réplication logique

Réplication Physique

Amélioration de pg_rewind

  • La source d’un rewind peut être une instance secondaire
  • Permet de limiter l’impact des lectures sur la nouvelle instance primaire

Nouveautés de libpq pour simplifier HA et répartition de charge

  • Nouvelles options pour le paramètre target_session_attrs
    • read_only
    • primary
    • standby
    • prefer-standby

Réplication logique

  • Nouveau mode streaming in-progress pour la réplication logique
    • à activer
  • Informations supplémentaires pour les messages d’erreur de type columns are missing
  • Ajout de la syntaxe ALTER SUBSCRIPTION… ADD/DROP PUBLICATION…

Sharding

  • Foreign Data Wrapper et Sharding

Foreign Data Wrapper et Sharding

  • Évolutions pour les Foreign Data Wrapper
  • Vers une architecture distribuée (sharding)

Lecture asynchrone des tables distantes

  • Nouveau nÅ“ud d’exécution Async Foreign Scan
  • CREATE SERVER … OPTIONS (host …, port …, async_capable on) (pas par défaut !)
  • Lecture parallélisée pour les partitions distantes
                                    QUERY PLAN                                    
----------------------------------------------------------------------------------
 Append
   ->  Async Foreign Scan on public.async_p1 t1_1
         Output: t1_1.a, t1_1.b, t1_1.c
         Remote SQL: SELECT a, b, c FROM public.base_tbl1 WHERE (((b % 100) = 0))
   ->  Async Foreign Scan on public.async_p2 t1_2
         Output: t1_2.a, t1_2.b, t1_2.c
         Remote SQL: SELECT a, b, c FROM public.base_tbl2 WHERE (((b % 100) = 0))

Développement et syntaxe SQL

  • Manipulation du type JSONB
  • Nouvelle fonction date_bin

Manipulation du type JSONB

  • Nouvelle syntaxe d’accès aux éléments d’une colonne jsonb

  • Expressions avec indice, de style tableau

    SELECT ('{"a": 1}'::jsonb)['a'];
    SELECT * FROM table_name WHERE jsonb_field['key'] = '"value"';
    UPDATE table_name SET jsonb_field['key'] = '1';

Nouvelle fonction date_bin

  • Nouvelle fonction pour répartir des timestamps dans des intervalles (buckets)
SELECT date_bin('1 hour 30 minutes', t, '2021-06-01 00:00:00'::timestamptz),
       id_sonde, avg(mesure)
  FROM sonde GROUP BY 1, 2 ORDER BY 1 ASC;
        date_bin        | id_sonde |          avg
------------------------+----------+------------------------
 2021-06-01 00:00:00+02 |        1 |     2.9318518518518519
 2021-06-01 01:30:00+02 |        1 |     8.6712962962962963
 2021-06-01 03:00:00+02 |        1 |    14.1218518518518519
 2021-06-01 04:30:00+02 |        1 |    19.0009259259259259

Supervision

  • Nouvelle vue pg_stat_wal
  • Nouveautées dans pg_stat_statements
  • Ajout de statistiques sur les sessions dans pg_stat_database
  • Identifiant pour les requêtes normalisées
  • Nouveauté dans pg_locks

Nouvelle vue pg_stat_wal

  • Permet de surveiller l’activité des WAL
  • Nouveau paramètre : track_wal_io_timing

Nouveautées dans pg_stat_statements

  • Traçage des accès faits via CREATE TABLE AS, SELECT INTO, CREATE MATERIALIZED VIEW, REFRESH MATERIALIZED VIEW et FETCH
  • Nouvelle vue pg_stat_statements_info
  • Nouvelle colonne toplevel dans la vue pg_stat_statements

Ajout de statistiques sur les sessions dans pg_stat_database

  • Ajout des colonnes suivantes à la vue système pg_stat_database :
    • session_time
    • active_time
    • idle_in_transaction_time
    • sessions
    • sessions_abandoned
    • sessions_fatal
    • sessions_killed

Identifiant pour les requêtes normalisées

  • Le query id est disponible globalement
    • valeur hachée sur 64 bits d’une requête normalisée
    • introduit avec pg_stat_statements en version 9.4
    • pg_stat_activity, log_line_prefix, EXPLAIN VERBOSE
  • nouveau paramètre compute_query_id (auto par défaut)
      query_id       |                           query
---------------------+---------------------------------------------------------
 2691537454541915536 | SELECT abalance FROM pgbench_accounts WHERE aid = 85694;
 2691537454541915536 | SELECT abalance FROM pgbench_accounts WHERE aid = 51222;
 2691537454541915536 | SELECT abalance FROM pgbench_accounts WHERE aid = 14006;
 2691537454541915536 | SELECT abalance FROM pgbench_accounts WHERE aid = 48639;

Nouveauté dans pg_locks

  • Ajout de la colonne waitstart
    • Heure à laquelle l’attente d’un verrou a commencé
            mode         | granted |      waitstart
    ---------------------+---------+---------------------
     AccessExclusiveLock | t       | 
     AccessShareLock     | f       | 2021-08-26 15:54:53

Performances

  • Nettoyage des index B-tree
  • Connexions simultanées en lecture seule

Nettoyage des index B-tree

  • Nettoyage des index B-tree « par le haut »
    • limite la fragmentation lorsque des lignes sont fréquemment modifiées

Connexions simultanées en lecture seule

Questions

Merci de votre écoute !