<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
  <title>Data Bene - Cédric Villemain</title>
  <subtitle>Base de données relationnelles, open-source et adaptives.</subtitle>
  <link href="https://www.data-bene.io/fr/authors/cedric-villemain/feed.xml" rel="self" type="application/atom+xml" />
  <updated>2025-09-29T00:00:00Z</updated>
  <id>https://www.data-bene.io/fr/authors/cedric-villemain/feed.xml</id>
    <entry>
      <title>Il était une fois une base confinée - PostgreSQL, QR Codes et l'art de la sauvegarde sans réseau</title>
      <link href="https://www.data-bene.io/fr/blog/sauvegarde-sans-reseau/" />
      <updated>2025-04-01T00:00:00Z</updated>
      <id>https://www.data-bene.io/fr/blog/sauvegarde-sans-reseau/</id>
     <content type="html"><![CDATA[ <h2 id="📦-le-fort-knox-des-bases-de-donnees"><a class="heading-anchor" href="#📦-le-fort-knox-des-bases-de-donnees">📦 Le Fort Knox des bases de données</a></h2>
<p>Il était une fois, dans une salle serveur lointaine, entourée de verre blindé et de béton armé, une base PostgreSQL tellement confinée, tellement isolée, qu’elle ne pouvait que rêver du cloud.</p>
<p>Pas de réseau.</p>
<p>Pas d’USB.</p>
<p>Aucun stockage externe accessible en écriture.</p>
<p>Juste un clavier, un écran, et le bourdonnement des filtres à air de qualité industrielle.</p>
<p>Ce n’était pas un simple environnement “air-gapped”. C’était une zone d’exfiltration zéro, avec une sécurité opérationnelle si rigoureuse qu’on aurait cru qu’elle protégeait des secrets d’État — ou pire, un système bancaire des années 80.</p>
<p>Et pourtant, dans cet oubli numérique, une question demeurait :<br>
<strong>Comment sauvegarder une base PostgreSQL sans jamais extraire un seul fichier ?</strong></p>
<hr>
<h2 id="🎥-quand-lecran-devient-ton-reseau"><a class="heading-anchor" href="#🎥-quand-lecran-devient-ton-reseau">🎥 Quand l’écran devient ton réseau</a></h2>
<p>Notre client ne voulait pas juste une sauvegarde. Il <em>en avait besoin</em>. La crainte n’était pas le vol, mais <strong>la perte totale</strong> : une carte mère qui meurt en silence, enfermant les données à jamais dans sa cage de verre. Et dans ce cas, casser le mur à la masse n’est pas un plan de reprise d’activité très élégant.</p>
<p>Nous avons envisagé toutes les options :</p>
<ul class="list">
<li>OCR d’un défilement de dump SQL ? Trop imprécis.</li>
<li>Filmer la sortie <code>psql</code> ? Beaucoup trop verbeux.</li>
<li>Imprimer l’hexadécimal ? On a quand même une conscience.</li>
</ul>
<p>Et puis, l’illumination : <strong>les QR codes</strong>.</p>
<p>Et si on faisait un <code>pg_dump</code> de la base…</p>
<p>…en QR codes…</p>
<p>…affichés à l’écran…</p>
<p>…filmés par une caméra haute fréquence…</p>
<p>…puis reconstitués image par image à l’extérieur ?</p>
<p>C’était absurde. Donc forcément prometteur.</p>
<hr>
<h2 id="🧠-hacking-pg_dump-la-version-pixelisee"><a class="heading-anchor" href="#🧠-hacking-pg_dump-la-version-pixelisee">🧠 Hacking <code>pg_dump</code> : la version pixelisée</a></h2>
<p>L’outil adoré <code>pg_dump</code> de PostgreSQL est modulaire. On l’a donc enrichi d’un nouvel “archiver” : <code>--format=qrcode</code>.</p>
<p>Voici le fonctionnement :</p>
<ol class="list">
<li><strong>Encodage QR</strong> : chaque portion de sortie SQL est convertie en QR code (format PNG).</li>
<li><strong>Streaming</strong> : au lieu de sauvegarder les images, on les envoie directement sur <code>stdout</code>.</li>
<li><strong>Mise en page</strong> : notre interface affiche plusieurs QR codes à l’écran en haute résolution (on parle de 2000+ pixels — de quoi afficher une grille bien dense).</li>
<li><strong>Capture vidéo</strong> : une machine dédiée avec une caméra 1280Hz filme l’écran et enregistre la séquence complète.</li>
</ol>
<p>Pas de macros. Pas de tricherie. Juste des photons et des images.</p>
<hr>
<h2 id="🔍-reconstruction-a-la-sortie-de-la-cage"><a class="heading-anchor" href="#🔍-reconstruction-a-la-sortie-de-la-cage">🔍 Reconstruction à la sortie de la cage</a></h2>
<p>Une fois la vidéo extraite du cube de verre :</p>
<ul class="list">
<li>Notre parseur lit la vidéo image par image.</li>
<li>Les QR codes sont détectés et décodés en parallèle.</li>
<li>Chaque bloc est identifié par son numéro de séquence.</li>
<li>Le tout est réassemblé en un fichier <code>pg_dump.sql</code> complet.</li>
</ul>
<p>Et voilà : la base renaît — <strong>entièrement exportée sans transfert numérique</strong>.<br>
Rien que de la lumière et des lentilles.</p>
<hr>
<h2 id="🧩-performances-et-fidelite"><a class="heading-anchor" href="#🧩-performances-et-fidelite">🧩 Performances et fidélité</a></h2>
<ul class="list">
<li><strong>QR Version</strong> : Version 40, mode binaire optimisé pour la densité maximale.</li>
<li><strong>Correction d’erreur</strong> : Niveau Q pour une robustesse accrue.</li>
<li><strong>Affichage</strong> : Grille 25×16 QR codes sur un écran 1920×1080 — soit 350 blocs par image (environ 1 Mo par frame).</li>
<li><strong>Vitesse de lecture</strong> : ~60 images/seconde → 21 000 blocs/seconde ≈ 60 Mo/s !</li>
<li><strong>Durée totale</strong> : Une sauvegarde logique complète de moins de 6 Go exportée en moins de 100 minutes !</li>
</ul>
<hr>
<h2 id="🛡️-pourquoi-cest-important"><a class="heading-anchor" href="#🛡️-pourquoi-cest-important">🛡️ Pourquoi c’est important</a></h2>
<p>Ce n’est pas juste une anecdote technique — c’est une preuve que <strong>la souplesse de PostgreSQL s’étend jusqu’à l’absurde</strong>. Les environnements ultra-sécurisés ne sont pas rares : défense, finance, infrastructures critiques… Et quand les outils classiques ne suffisent plus, l’architecture extensible de PostgreSQL permet d’innover, même en milieu extrême.</p>
<p>Chez <strong>Data Bene</strong>, on vit pour ce genre de défi. Optimiser les plans d’exécution ou imaginer des méthodes d’exfiltration qui ressemblent à de l’espionnage, c’est notre terrain de jeu.</p>
<hr>
<p><em>Envie d’essayer ? Écrivez-nous — on adore les sauvegardes bizarres.</em></p>
<p><em>Et si jamais vous pensez à utiliser <code>pg_restore</code> en spectacle laser, appelez-nous. On est curieux.</em></p>
 ]]></content>
			<author>
				<name>Cédric Villemain</name>
			</author>
    </entry>
    <entry>
      <title>Retour de HOW2025</title>
      <link href="https://www.data-bene.io/fr/blog/retour-de-how2025/" />
      <updated>2025-07-14T00:00:00Z</updated>
      <id>https://www.data-bene.io/fr/blog/retour-de-how2025/</id>
     <content type="html"><![CDATA[ <p>Les 27 et 28 juin se tenaient les conférences Highgo Open World, consacrées à l’écosystème PostgreSQL et au projet IvorySQL. Côté chiffres, le succès est notable : près de 1 000 participants sur place, jusqu’à 8 000 connexions simultanées sur les streams, et environ 25 000 spectateurs au total.</p>
<p>Le programme comptait 101 conférences techniques animées par 105 intervenants. La majorité des sessions étaient en mandarin, avec un track anglophone proposé en traduction simultanée. Vous pouvez consulter le programme complet sur <a href="https://ivorysql.io/schedule/" rel="noopener">IvorySQL.io</a> et retrouver les replays sur Weibo via <a href="https://ivorysql.io/2025/06/27/live-access-june27/" rel="noopener">ce lien.</a></p>
<p>Nous étions un petit groupe de la communauté internationale présents, dont <a href="https://postgresql.life/post/grant_zhou/" rel="noopener">Grant Zhou</a> qui assure entre autre la liaison et la collaboration avec l’association PostgreSQL en Chine et dans le reste du monde.</p>
<p>Sur le plan technique, le contenu était dense et particulièrement intéressant. J’ai retenu notamment :</p>
<ul class="list">
<li>
<p>La présentation d’Alena Rybakina sur le planificateur de requêtes PostgreSQL et les stratégies pour contourner certaines limites.</p>
</li>
<li>
<p>Un focus clair et concret sur Patroni (Haute-Disponibilité) par Alexander Kukushkin et Polina Bungina.</p>
</li>
<li>
<p>Florentz Tselai a présenté 2 sujets en appliquant ses préceptes: simplicité efficacité, sur l’utilisation de «l’IA» avec PostgreSQL et la gestion des données avec comme support Sun Tzu et les 36 stratagèmes.</p>
</li>
<li>
<p>Également une très bonne introduction à Bazel et son utilisation pour Monogres (à découvrir bientôt) présenté avec énergie par Alvaro Hernandez.</p>
<p>Monogres est une initiative très intéressante qui doit permettre de renforcer le contrôle de la supply chain logicielle, un thème  majeur dans l’IT de nos jours. Et j’y ai aussi vu une très belle occasion d’offrir une vitrine a des variations de PostgreSQL avec des fonctionnalités et des correctifs dont l’inclusion dans PostgreSQL lui-même même ou le backport dans des version majeures précédentes n’est pas toujours possible.</p>
</li>
<li>
<p>Michael Meskes avait l’honneur d’une conférence plénière pour un sujet qui le mérite largement: « From Code to Commerce: Open Source Business Models Today », une keynote sur l’open-source et les logiciels libres, appliqués à l’écosystème PostgreSQL.</p>
</li>
<li>
<p>Mon collègue Andrea a présenté les évolutions et les tendances des entreprises pour transiter vers IvorySQL et PostgreSQL</p>
</li>
<li>
<p>Pour ma part, j’ai présenté linux PSI dans le contexte PostgreSQL.</p>
</li>
</ul>
<p>Comme tout est en streaming, je vous encourage à aller explorer et visionner les sujets qui vous intéressent. Il y a ausi des conférences en anglais pré-enregistrées mais j’avoue avoir profité des créneaux pour échanger avec des participants.</p>
<p>En apparté des conférences, j’ai eu la chance de rencontrer plusieurs membres de la communauté PostgreSQL chinoise très réputés pour leur implication dans le succès de PostgreSQL localement. J’ai eu aussi l’occasion d’en apprendre d’avantage sur Cloudberry, en remplacement de Greenplum, merci Dianjin Wang!</p>
<hr>
<p>Pour Data Bene s’était également un moment prévu pour rencontrer l’équipe en charge d’IvorySQL, basée en grande partie dans le Shandong, la province où se trouve Jinan, ville hôte des conférences. Ivory est un projet auquel nous participons activement et qui permet aux entreprises de s’affranchir d’Oracle «en douceur». C’est un sujet important pour nos clients et qui occupe un place prépondérante dans notre partenariat avec Highgo: ils portent ce projet depuis plusieurs années déjà et nous voulons permettre aux entreprises européenes d’en profiter avec un accompagnement et expertise adaptée.</p>
<hr>
<p>Les conférences étaient très bien organisées et l’acceuil formidable, le «Social Event» au «beer garden» local parfaitement adapté à la chaleur de Jinan fin juin!</p>
<p>Vu le programme des conférences j’ai amèrement regreté de ne rien comprendre (Il y avait 1 track en Anglais et 5 en Mandarin) … mais il se dit déjà que l’an prochain les conférences en Mandarin pourraient peut être être traduites (en anglais), et la date avancée en Mai pour profiter d’un climat plus doux.</p>
<p>Il y a tellement à y apprendre que j’y retournerai avec grand plaisir.</p>
 ]]></content>
			<author>
				<name>Cédric Villemain</name>
			</author>
    </entry>
    <entry>
      <title>Statistiques cumulatives dans PostgreSQL 18</title>
      <link href="https://www.data-bene.io/fr/blog/statistiques-cumulatives-dans-postgresql-18/" />
      <updated>2025-09-29T00:00:00Z</updated>
      <id>https://www.data-bene.io/fr/blog/statistiques-cumulatives-dans-postgresql-18/</id>
     <content type="html"><![CDATA[ <p>Dans <strong>PostgreSQL 18</strong>, le sous-système de statistiques et de supervision bénéficie d’une refonte majeure: statistiques cumulatives étendues, nouvelle visibilité I/O par backend, possibilité pour les extensions d’exporter / importer / ajuster les statistiques, et améliorations des contrôles GUC ainsi que du comportement de cache et de snapshot. Ces changements ouvrent de nouvelles perspectives pour l’analyse de performance, la simulation inter-environnements et une meilleure intégration avec les extensions. Dans cet article, j’explore les nouveautés, les points d’attention, les paramètres GUC, ainsi que la manière dont les auteurs d’extensions peuvent exploiter la nouvelle API en C.</p>
<h2 id="introduction-and-motivation"><a class="heading-anchor" href="#introduction-and-motivation">Introduction &amp; motivation</a></h2>
<p>Les statistiques (au sens large: compteurs de supervision, métriques I/O, et estimations pour le planificateur / optimiseur) sont au cœur à la fois de l’optimisation de performance et des décisions internes de PostgreSQL. Des statistiques transparentes, fiables et manipulables permettent entre autres aux DBAs d’adresser directement l’efficacité de PostgreSQL, et donnent aux «extensions» la possibilité d’améliorer l’expérience utilisateur.</p>
<p>Cela dit, le système historique de statistiques de PostgreSQL n’était pas exempt de frictions: capacité limitée à réinitialiser les statistiques des relations, métriques exprimées dans des unités pas toujours alignées avec les besoins utilisateurs, absence d’API C pour utiliser le moteur de statistiques cumulatives de PostgreSQL. PostgreSQL 18 répond directement à ces préoccupations.</p>
<p>Voici un résumé des améliorations clés.</p>
<h2 id="un-avertissement-sur-les-statistiques"><a class="heading-anchor" href="#un-avertissement-sur-les-statistiques">Un avertissement sur les statistiques</a></h2>
<p>Bien que les statistiques soient extrêmement utiles, leur collecte peut consommer du temps et des ressources. PostgreSQL 18 introduit un point important: avec l’élargissement du spectre des métriques collectables, la taille maximale de la table de hachage a été augmentée. Gardez cela à l’esprit, surtout si vous concevez des systèmes à grande échelle avec des architectures «un ensemble de tables par client»: on a constaté que la limite de 1 Go pouvait être atteinte avec quelques millions de tables.</p>
<h2 id="quoi-de-neuf-dans-postgresql-18-et-les-«-stats-»"><a class="heading-anchor" href="#quoi-de-neuf-dans-postgresql-18-et-les-«-stats-»">Quoi de neuf dans PostgreSQL 18 et les « stats »</a></h2>
<p>Voici les nouvelles fonctionnalités majeures ou les améliorations concernant les statistiques et la supervision.</p>
<p>De manière générale, <a href="https://www.postgresql.org/docs/18/monitoring-stats.html#MONITORING-PG-STAT-IO-VIEW" rel="noopener">pg_stat_io</a> rapporte désormais l’activité I/O en octets plutôt qu’en pages, ce qui est plus pratique pour l’analyse. De plus, les statistiques WAL y ont été déplacées depuis <code>pg_stat_wal</code>, offrant ainsi une vue unique et complète.</p>
<h3 id="mises-a-jour"><a class="heading-anchor" href="#mises-a-jour">Mises à jour</a></h3>
<p><a href="https://www.postgresql.org/docs/18/pgupgrade.html" rel="noopener">pg_upgrade</a> est désormais capable de conserver les statistiques de l’optimiseur, supprimant la nécessité de relancer un <code>ANALYZE</code> complet pour obtenir de bons plans de requêtes après une montée de version: une avancée très attendue pour les grandes bases!</p>
<p>Attention toutefois: les statistiques personnalisées ajoutées par une extension ainsi que celles créées avec <a href="https://www.postgresql.org/docs/18/sql-createstatistics.html" rel="noopener">CREATE STATISTICS</a> ne sont pas conservées.</p>
<p>Vous voudrez sûrement examiner les nouvelles options de <a href="https://www.postgresql.org/docs/18/app-vacuumdb.html" rel="noopener">vacuumdb</a> (<code>--missing-stats-only</code>) pour n’analyser que ce qui est nécessaire.</p>
<p>Dans la même veine, l’option <code>--[no-]statistics</code> a été ajoutée à <a href="https://www.postgresql.org/docs/18/app-pgdump.html" rel="noopener">pg_dump</a>, <a href="https://www.postgresql.org/docs/18/app-pgdumpall.html" rel="noopener">pg_dumpall</a>, et <a href="https://www.postgresql.org/docs/18/app-pgrestore.html" rel="noopener">pg_restore</a>.</p>
<h3 id="maintenance"><a class="heading-anchor" href="#maintenance">Maintenance</a></h3>
<p>Il est désormais plus simple d’évaluer l’effort de maintenance sur les objets, puisque le temps total passé dans les opérations VACUUM et ANALYZE (y compris<br>
automatiques) est rapporté dans <a href="https://www.postgresql.org/docs/18/monitoring-stats.html#MONITORING-PG-STAT-ALL-TABLES-VIEW" rel="noopener">pg_stat_all_tables</a> et ses variantes.</p>
<p>Un nouveau GUC à ne pas oublier: <a href="https://www.postgresql.org/docs/18/runtime-config-statistics.html#GUC-TRACK-COST-DELAY-TIMING" rel="noopener">track_cost_delay_timing</a>. Il collecte le temps passé à dormir (suite aux opérations retardées) pour <code>VACUUM</code> et <code>ANALYZE</code>. Très intéressant, mais comme les autres GUC <code>track_io*</code>, il multiplie les appels à l’horloge système, ce qui peut provoquer un impact sévère sur certaines plateformes. Toujours vérifier avec un outil comme <a href="https://www.postgresql.org/docs/18/pgtesttiming.html" rel="noopener">pg_test_timing</a> pour s’assurer que votre système peut le supporter!</p>
<p>Plus de questions sur l’activité du checkpointer grâce à <a href="https://www.postgresql.org/docs/18/monitoring-stats.html#MONITORING-PG-STAT-CHECKPOINTER-VIEW" rel="noopener">pg_stat_checkpointer</a>. Le nouvel attribut <code>num_done</code> indique le nombre de checkpoints <strong>terminés</strong>. Vous pouvez aussi savoir quel type de buffers a été écrit grâce à <code>slru_written</code>, et <code>buffers_written</code> qui ne concerne désormais que <code>shared_buffers</code>: auparavant, journal et vue n’affichaient pas les mêmes totaux, car un compteur <code>SLRU</code> <a href="https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=17cc5f666" rel="noopener">existait dans un cas mais pas dans l’autre</a>.</p>
<h3 id="analyse"><a class="heading-anchor" href="#analyse">Analyse</a></h3>
<p>Envie d’en savoir plus sur l’I/O traité par un backend (PID) ? Appelez <a href="https://www.postgresql.org/docs/18/monitoring-stats.html#PG-STAT-GET-BACKEND-IO" rel="noopener">pg_stat_get_backend_io(int)</a> et vous obtiendrez une sortie similaire à la vue <code>pg_stat_io</code>, mais pour ce processus. Pour les stats WAL de ce PID: utilisez <a href="https://www.postgresql.org/docs/18/monitoring-stats.html#PG-STAT-GET-BACKEND-WAL" rel="noopener">pg_stat_get_backend_wal(int)</a>.</p>
<p>De nouveaux attributs <code>parallel_workers_to_launch</code> et <code>parallel_workers_launched</code> apparaissent dans <a href="https://www.postgresql.org/docs/18/monitoring-stats.html#MONITORING-PG-STAT-DATABASE-VIEW" rel="noopener">pg_stat_database</a>. Le ratio permet de savoir si nous avons assez de slots pour les workers parallèles.</p>
<p>Changements intéressants dans <a href="https://www.postgresql.org/docs/18/pgstatstatements.html" rel="noopener">pg_stat_statements</a>: plus de requêtes seront regroupées sous le même identifiant. Par exemple, les<br>
motifs <code>IN (1,2,3, ...)</code> n’utiliseront que la première et la dernière constante. Un changement plus contre-intuitif concerne le nom de table utilisé dans une requête: seul le nom est pris en compte, pas le schéma ni l’OID de relation. Cela permet de suivre les tables supprimées ou recréées, mais cela peut aussi regrouper les stats de tables sans lien ayant simplement le même nom. Pour séparer les stats de tables homonymes, il faudra les aliaser dans les requêtes (<code>FROM my.table mt, other.table ot</code>)…</p>
<p>Enfin, ajouts à <a href="https://www.postgresql.org/docs/18/view-pg-backend-memory-contexts.html" rel="noopener">pg_backend_memory_contexts</a> avec <code>path</code> (pour récupérer parent/enfant) et <code>type</code> pour distinguer les contextes <code>AllocSet</code>, <code>Generation</code>, <code>Slab</code> et <code>Bump</code>… Et au fait, que sont <code>Slab</code> et <code>Bump</code> ? Pas documentés ; il faut <a href="https://github.com/postgres/postgres/tree/master/src/backend/utils/mmgr" rel="noopener">lire les en-têtes des fichiers C ici</a>. Ils existent pour optimiser l’allocation, la réallocation et la réinitialisation mémoire selon les usages attendus. Par exemple, <code>Slab</code> est défini comme un «MemoryContext implementation designed for cases where large numbers of equally-sized objects can be allocated and freed efficiently with minimal memory wastage and fragmentation».</p>
<p>Ah, non, encore une dernière: <code>wal_buffers_full</code> a été ajouté à <code>pg_stat_statements</code> pour permettre un meilleur réglage de <code>wal_buffers</code>.</p>
<h3 id="replication"><a class="heading-anchor" href="#replication">Réplication</a></h3>
<p>De meilleures informations apparaissent désormais pour la gestion des conflits en réplication logique grâce à de nouveaux attributs dans <a href="https://www.postgresql.org/docs/18/monitoring-stats.html#MONITORING-PG-STAT-SUBSCRIPTION-STATS" rel="noopener">pg_stat_subscription_stats</a>. En référence, cet extrait du <a href="https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=6c2b5edec" rel="noopener">commit</a> liste les attributs introduits:</p>
<ul class="list">
<li><code>confl_insert_exists</code>: nombre de fois où une insertion de ligne a violé une contrainte unique NOT DEFERRABLE.</li>
<li><code>confl_update_origin_differs</code>: nombre de fois où une mise à jour a été faite sur une ligne déjà modifiée par une autre origine.</li>
<li><code>confl_update_exists</code>: nombre de fois où la valeur mise à jour d’une ligne viole une contrainte unique NOT DEFERRABLE.</li>
<li><code>confl_update_missing</code>: nombre de fois où le tuple à mettre à jour est manquant.</li>
<li><code>confl_delete_origin_differs</code>: nombre de fois où une suppression a été effectuée sur une ligne déjà modifiée par une autre origine.</li>
<li><code>confl_delete_missing</code>: nombre de fois où le tuple à supprimer est manquant.</li>
</ul>
<h3 id="avance"><a class="heading-anchor" href="#avance">Avancé</a></h3>
<p>Un <a href="https://www.postgresql.org/docs/18/functions-admin.html#FUNCTIONS-ADMIN-STATSMOD" rel="noopener">nouveau jeu de fonctions</a> permet désormais de gérer les statistiques de relations et d’attributs (<code>relpages</code>, <code>avg_width</code>, etc.). Cela offre la possibilité d’exporter, importer et ajuster les stats à volonté, afin de répliquer le comportement du planificateur hors production, de maintenir des stats corrigées, et plus encore.</p>
<h3 id="mon-prefere-pour-les-auteurs-dextensions-la-nouvelle-api-c-de-stats"><a class="heading-anchor" href="#mon-prefere-pour-les-auteurs-dextensions-la-nouvelle-api-c-de-stats">Mon préféré pour les auteurs d’extensions: la nouvelle API C de stats</a></h3>
<p>L’une des évolutions les plus enthousiasmantes est ce que PostgreSQL 18 <em>ouvre</em> aux auteurs d’extensions.</p>
<p>Cette petite ligne au bas de la section <a href="https://www.postgresql.org/docs/18/release-18.html#RELEASE-18-MODULES" rel="noopener">E.1.3.9 Modules</a> est celle qui nous intéresse :</p>
<blockquote>
<p>Allow extensions to use the server’s cumulative statistics API (Michael Paquier)</p>
</blockquote>
<p>Jusqu’ici, la manipulation des statistiques était réservée à l’interne ; désormais, une API officielle et structurée est disponible pour construire (ou envelopper) autour.</p>
<p>Le <a href="https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=7949d9594" rel="noopener">message de commit</a> est bien rédigé et couvre l’essentiel des nouveautés. Un sous-ensemble des options est <a href="https://www.postgresql.org/docs/18/xfunc-c.html#XFUNC-ADDIN-CUSTOM-CUMULATIVE-STATISTICS" rel="noopener">détaillé dans la documentation</a>. Cependant, il faut encore plonger dans le code source pour en savoir plus ; en particulier, il vaut la peine de regarder l’extension <code>injection points</code> (fournie avec PostgreSQL) qui utilise cette nouvelle API.</p>
<p>Pour aller plus loin sur la manière dont une extension peut exploiter ces nouvelles capacités, vous pourrez bientôt découvrir <strong>PACS (PostgreSQL Advanced Cumulative Statistics)</strong> sur Codeberg : mon projet qui propose une bibliothèque de wrappers et des utilitaires autour des nouvelles APIs de statistiques de PostgreSQL 18.</p>
<p>En attendant, la présentation que j’ai donnée à <a href="https://archive.fosdem.org/2025/schedule/event/fosdem-2025-4496-stats-roll-baby-stats-roll-/" rel="noopener">FOSDEM 2025</a> explore ce sujet plus en détail.</p>
 ]]></content>
			<author>
				<name>Cédric Villemain</name>
			</author>
    </entry>
</feed>
