<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Le blog Dalibo</title>
		<description>DALIBO est le spécialiste français de PostgreSQL. Nous proposons du support, de la formation et du conseil depuis 2005.</description>
		<link>https://blog.dalibo.com/</link>
		<atom:link href="https://blog.dalibo.com/feed.xml" rel="self" type="application/rss+xml" />
		
			<item>
				<title>Plongez dans le monde de CloudNativePG #13 - OOM Kill et QoS</title>
				<description>&lt;p&gt;&lt;em&gt;Lyon, le 2 octobre 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CloudNativePG&lt;/strong&gt; ou comment embarquer un éléphant sur un porte-conteneurs !&lt;/p&gt;

&lt;p&gt;Il faut s’attendre à de nombreux changements lorsqu’une instance est déployée
dans Kubernetes. L’une d’entre elles concerne la gestion de la mémoire et plus
spécifiquement le mécanisme d’éviction en cas de surconsommation mémoire.
Regardons cela de plus près !&lt;/p&gt;

&lt;!--MORE--&gt;

&lt;p&gt;&lt;img src=&quot;/img/cnpg-header.png&quot; alt=&quot;moteur&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;good-old-days&quot;&gt;&lt;em&gt;Good old days&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;L’installation sur serveur physique ou machine virtuelle était, jusqu’à
peu, la méthode privilégiée pour déployer PostgreSQL. Dans la majorité des
cas, les machines utilisées étaient, et sont encore, dédiées à nos bases de données.&lt;/p&gt;

&lt;p&gt;Une machine = une instance PostgreSQL. Le principe
&lt;a href=&quot;https://fr.wikipedia.org/wiki/Principe_KISS_&quot;&gt;&lt;em&gt;KISS&lt;/em&gt;&lt;/a&gt; à l’état pur.&lt;/p&gt;

&lt;p&gt;Sur ces environnements dédiés, il est communément admis que la désactivation de
la surallocation mémoire
(paramètres &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vm.overcommit_memory&lt;/code&gt; et &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vm.overcommit_ratio&lt;/code&gt;)
est une bonne pratique. La documentation officielle de PostgreSQL
&lt;a href=&quot;https://docs.postgresql.fr/current/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT&quot;&gt;explique pourquoi&lt;/a&gt;. 
Pour les détails, &lt;a href=&quot;https://kb.dalibo.com/installation/plateformes/linux/overcommit_memory/&quot;&gt;voir notre base de connaissance&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;et-maintenant-&quot;&gt;Et maintenant ?&lt;/h3&gt;

&lt;p&gt;Les besoins évoluent et justifient parfois le déploiement de centaines, voire
de milliers d’instances. Un environnement conteneurisé, et à fortiori un
environnement Kubernetes, peut être le socle de la &lt;em&gt;stack&lt;/em&gt; technique pour
répondre à ce besoin.&lt;/p&gt;

&lt;p&gt;Mais les règles du jeu changent :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;La désactivation de l’&lt;em&gt;overcommit memory&lt;/em&gt; n’est pas systématique, voire impossible (par exemple le mode &lt;a href=&quot;https://docs.rke2.io/security/hardening_guide#kernel-parameters&quot;&gt;CIS Hardening de RKE2&lt;/a&gt; et le fichier 
&lt;a href=&quot;https://github.com/rancher/rke2/blob/2d7ffa785a94c775ca82090f906d6dee447ccba7/bundle/share/rke2/rke2-cis-sysctl.conf#L3&quot;&gt;rke2-cis-sysctl.conf&lt;/a&gt;);&lt;/li&gt;
  &lt;li&gt;Votre hébergeur ne vous laissera pas accéder aux &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Nodes&lt;/code&gt; pour faire de telles
configurations ;&lt;/li&gt;
  &lt;li&gt;D’autres mécanismes du noyau rentrent en jeu (&lt;em&gt;cgroups&lt;/em&gt;) ;&lt;/li&gt;
  &lt;li&gt;Vos bases de données peuvent cohabiter avec des &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pods&lt;/code&gt; applicatifs ;&lt;/li&gt;
  &lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tout cela pour dire qu’il faut revoir notre copie et adapter nos
pratiques avec les possibilités offertes par Kubernetes.&lt;/p&gt;

&lt;h3 id=&quot;qos-des-pods&quot;&gt;QoS des Pods&lt;/h3&gt;

&lt;p&gt;Dans Kubernetes, il existe le concept de &lt;strong&gt;QoS&lt;/strong&gt;. À chaque &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pod&lt;/code&gt; est associée une
classe de service qui, selon la configuration en ressources, modifie les
règles de déploiement du &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pod&lt;/code&gt; et est utilisée en cas d’éviction de
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pods&lt;/code&gt;. L’idée de cet article n’est pas de détailler ce concept. Pour cela, nous
vous renvoyons à la 
&lt;a href=&quot;https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/&quot;&gt;documentation officielle&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ce qu’il faut savoir, c’est qu’il en existe trois qui sont attribuées selon les
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;requests&lt;/code&gt; et &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;limits&lt;/code&gt; que vous définissez sur la ressource &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pod&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Best Effort&lt;/em&gt; ;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Burstable&lt;/em&gt; ;&lt;/li&gt;
  &lt;li&gt;et &lt;em&gt;Guaranteed&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Selon la QoS, des ajustements sont faits au niveau des processus et la politique
d’éviction change.&lt;/p&gt;

&lt;h3 id=&quot;surconsommation-et-oom-killer&quot;&gt;Surconsommation et OOM Killer&lt;/h3&gt;

&lt;p&gt;Sur un système Linux, si un processus consomme trop de mémoire, l’&lt;em&gt;OOM Killer&lt;/em&gt;
peut être appelé pour chercher à en libérer afin d’éviter de saturer le système.
Le meilleur moyen de soulager le système est d’arrêter un programme en cours de
fonctionnement… un arrêt que l’on pourrait qualifier de « brutal ».&lt;/p&gt;

&lt;p&gt;L’&lt;em&gt;OOM Killer&lt;/em&gt; sélectionne le processus à cibler en fonction d’un score calculé
par le noyau. Pour faire simple, le processus avec le score le plus élevé est
évincé. Il existe des moyens pour ajuster le score d’un processus en
particulier.&lt;/p&gt;

&lt;p&gt;L’&lt;em&gt;OOM Killer&lt;/em&gt; n’a pas connaissance du traitement effectué par tel ou tel
processus. Concrètement, avec PostgreSQL, il faut à tout prix éviter un &lt;em&gt;kill&lt;/em&gt; du
service &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postmaster&lt;/code&gt;, donc le rendre moins susceptible à être ciblé.&lt;/p&gt;

&lt;h3 id=&quot;trois-clusters-trois-qos-et-des-comportements-différents&quot;&gt;Trois Clusters, trois QoS et des comportements différents&lt;/h3&gt;

&lt;p&gt;Déployons trois &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Clusters&lt;/code&gt; avec des QoS différentes (dépend des &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;requests &lt;/code&gt; et
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;limits&lt;/code&gt;) et voyons quels sont les changements visibles.
Notez qu’ici, la désactivation de l’&lt;em&gt;overcommit&lt;/em&gt; n’a pas été faite.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cluster-besteffort&lt;/code&gt; :
    &lt;ul&gt;
      &lt;li&gt;Pas de section &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;resources&lt;/code&gt; ;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cluster-burstable&lt;/code&gt; :
    &lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &lt;span class=&quot;na&quot;&gt;requests&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;memory&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;300Mi&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;cpu&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;50m&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cluster-guaranteed&lt;/code&gt; :
    &lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &lt;span class=&quot;na&quot;&gt;requests&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;memory&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;2Gi&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;cpu&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;0.2&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;limits&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;memory&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;2Gi&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;cpu&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;0.2&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Regardons notamment les paramètres &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oom_score&lt;/code&gt; et &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oom_score_adj&lt;/code&gt; des processus
PostgreSQL &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postmaster&lt;/code&gt; de chaque &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cluster&lt;/code&gt;.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Cluster&lt;/th&gt;
      &lt;th&gt;oom_score&lt;/th&gt;
      &lt;th&gt;oom_score_adj&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cluster-besteffort&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;1333&lt;/td&gt;
      &lt;td&gt;1000&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cluster-burstable&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;1321&lt;/td&gt;
      &lt;td&gt;1000&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cluster-guaranteed&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;3&lt;/td&gt;
      &lt;td&gt;-997&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;Pour information, voici une manière de trouver le &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pid&lt;/code&gt; du &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postmaster&lt;/code&gt; :&lt;/p&gt;

  &lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;kubectl exec -it cluster-besteffort-1 -c postgres -- cat /var/lib/postgresql/data/pgdata/&amp;gt;&lt;/span&gt;postmaster.pid | &lt;span class=&quot;nb&quot;&gt;head&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-n1&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;36
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ce qui ressort de ce tableau est que Kubernetes modifie les valeurs du &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oom_score_adj&lt;/code&gt; des
processus (ici &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postmaster&lt;/code&gt;, mais ce serait pareil pour d’autres processus
présents dans le &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pod&lt;/code&gt;) en fonction de la QoS du &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pod&lt;/code&gt;. Cela a pour conséquence
de modifier le &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oom_score&lt;/code&gt; qui lui est calculé à partir de plusieurs paramètres
(voir la
&lt;a href=&quot;https://elixir.bootlin.com/linux/v7.2.5/source/mm/oom_kill.c#L228&quot;&gt;formule&lt;/a&gt;)
ajustée par &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oom_score_adj&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Ainsi, si ces trois &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Clusters&lt;/code&gt; sont sur un même &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Node&lt;/code&gt; Kubernetes et qu’une
pression au niveau de la mémoire a lieu, le noyau fait appel à 
l’&lt;em&gt;OOM Killer&lt;/em&gt; pour retrouver de la mémoire. Ce dernier cible donc en priorité
un processus issu de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cluster-besteffort&lt;/code&gt; ou &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cluster-burstable&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Là encore, il n’y a pas moyen de savoir ce que fait vraiment le processus ciblé et
s’il est préférable d’arrêter tel ou tel processus parmi les cibles potentielles.&lt;/p&gt;

&lt;p&gt;Avec PostgreSQL, on préférait que des processus enfants (par exemple un &lt;em&gt;backend&lt;/em&gt;
client) soient ciblés plutôt que &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postmaster&lt;/code&gt;. C’est possible avec la variable
d’environnement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PG_OOM_ADJUST_VALUE&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;cloudnativepg-en-rajoute-une-couche&quot;&gt;CloudNativePG en rajoute une couche&lt;/h3&gt;

&lt;p&gt;Ainsi, lors de la création d’un &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cluster&lt;/code&gt; CloudNativePG qui a une QoS
positionnée à &lt;em&gt;guaranteed&lt;/em&gt;, l’opérateur effectue une opération supplémentaire 
en ajustant la variable d’environnement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PG_OOM_ADJUST_VALUE&lt;/code&gt; à &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt;. Ceci est
fait uniquement pour la QoS &lt;em&gt;guaranteed&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;postgres@cluster-guaranteed-1:/$&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ps &lt;span class=&quot;nt&quot;&gt;-aux&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;postgres    3749  0.0  0.0 226404 13200 ?        Ss   10:40   0:00 postgres: cluster-guaranteed: postgres postgres [local] idle
[...]
postgres    3890  0.0  0.0   6412  3768 pts/0    R+   10:48   0:00 ps -aux
&lt;/span&gt;&lt;span class=&quot;gp&quot;&gt;postgres@cluster-guaranteed-1:/$&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; /proc/3749/oom_score_adj 
&lt;span class=&quot;go&quot;&gt;0
&lt;/span&gt;&lt;span class=&quot;gp&quot;&gt;postgres@cluster-guaranteed-1:/$&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; /proc/3749/oom_score
&lt;span class=&quot;go&quot;&gt;666
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Dans cet exemple, le &lt;em&gt;backend&lt;/em&gt; client au &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pid&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3749&lt;/code&gt; a bien son score
d’ajustement (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oom_score_adj&lt;/code&gt;) à &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt; et donc un &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oom_score&lt;/code&gt; bien plus élevé que
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postmaster&lt;/code&gt;, en l’occurrence, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;666&lt;/code&gt; (score généralement rencontré pour des
processus consommant peu de mémoire).&lt;/p&gt;

&lt;h3 id=&quot;oom-killer-en-action&quot;&gt;&lt;em&gt;OOM Killer&lt;/em&gt; en action&lt;/h3&gt;

&lt;p&gt;Comprendre pourquoi telle ou telle valeur est affectée et comment cela influence
l’éviction de processus et de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pod&lt;/code&gt; est nécessaire. Mais concrètement, qu’est-ce
que cela change dans ma vie de DBA, SRE ou DevOps ?&lt;/p&gt;

&lt;p&gt;Faisons en sorte de déclencher une pression mémoire et observons ce qu’il se passe.
Pour cela, exécutons l’ordre SQL de tri suivant en veillant à augmenter
drastiquement la mémoire de travail utilisable.
&lt;strong&gt;Il ne faut évidemment pas tenter ceci en production !&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SET&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;work_mem&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'1000GB'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;EXPLAIN&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;ANALYZE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;generate_series&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;e9&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DESC&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;(Noter que le DBA n’a aucun moyen d’empêcher un utilisateur de faire cela !)
Cet ordre est lancé dans chacun des trois &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Clusters&lt;/code&gt; via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;psql&lt;/code&gt;. Les traces
sont remontées des traces noyau du système par &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo journalctl --utc -fke&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cluster-besteffort&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lors du test, le &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kube-controller&lt;/code&gt; a fait appel au &lt;em&gt;OOM Killer&lt;/em&gt; du système car
une allocation mémoire lui a été impossible.&lt;/p&gt;

&lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;go&quot;&gt;kernel: kube-controller invoked oom-killer: gfp_mask=0x140cca(GFP_HIGHUSER_MOVABLE|__GFP_COMP)…
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Un peu plus loin, le process ciblé est indiqué &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;task=postgres,pid=613477&lt;/code&gt;. Il
consommait environ 7,8 Go de mémoire (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8176716kB&lt;/code&gt;). L’&lt;em&gt;OOM Killer&lt;/em&gt; global a été
invoqué : &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;global_oom&lt;/code&gt;; car il s’agit d’une allocation impossible. Notez
également que le &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oom_score_adj&lt;/code&gt; du processus tué se trouve mentionné à la fin
de la ligne (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1000&lt;/code&gt;).&lt;/p&gt;

&lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;go&quot;&gt;kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=cri-containerd-e51b72c22b5f0f9bd976a36b7e33183d364d6562623c0eb8d1e68ee1eaa99321.scope,mems_allowed=0,global_oom,task_memcg=/system.slice/docker-0d3ac421a88f3823ef43f68cfc… ,task=postgres,pid=613477,uid=26
kernel: Out of memory: Killed process 613477 (postgres) total-vm:9011764kB, anon-rss:8176716kB, file-rss:160kB, shmem-rss:4308kB, UID:26 pgtables:16212kB oom_score_adj:1000
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Le système a donc cherché, trouvé et arrêté un processus consommateur sur le
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Node&lt;/code&gt; : &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Killed process 613477 (postgres)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Détail qui a son importance, le processus était « rattaché » à d’autres
processus. On peut notamment le voir avec le paramètre &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;task_memcg&lt;/code&gt; (tronqué
dans l’exemple de trace) et 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;are going to be killed due to memory.oom.group set&lt;/code&gt;. La description faite dans
le message du
&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3d8b38eb81cac81395f6a823f6bf401b327268e6&quot;&gt;&lt;em&gt;commit&lt;/em&gt;&lt;/a&gt;
est très claire. L’idée est de traiter le &lt;em&gt;cgroup&lt;/em&gt; comme une entité unique.&lt;/p&gt;

&lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;go&quot;&gt;kernel: Tasks in /system.slice/docker-0d3ac421a88f3823ef43f68cfcad6de7739069b01ff51d2ed918f8659e93702e.scope/kubelet.slice/kubelet-kubepods.slice/kubelet-kubepods-besteffort.slice/kubelet-kubepods-besteffort-pod6e7d6a9d_2946_4aa6_9c74_c866aadf17e1.slice/cri-containerd-342c7d2864fbb3eed1c4645e39db632ae0d0ec41676780b6f6af047e252ab011.scope are going to be killed due to memory.oom.group set
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ces autres processus ne sont ni plus ni moins que ceux présents dans le
conteneur, autrement dit, ceux associés au même
&lt;a href=&quot;https://en.wikipedia.org/wiki/Cgroups&quot;&gt;&lt;em&gt;cgroup&lt;/em&gt;&lt;/a&gt;… donc le &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postmaster&lt;/code&gt;
lui-même.&lt;/p&gt;

&lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;go&quot;&gt;kernel: Out of memory: Killed process 611483 (manager) …
kernel: Out of memory: Killed process 611551 (postgres) …
kernel: Out of memory: Killed process 611552 (postgres) …
kernel: Out of memory: Killed process 611553 (postgres) …
kernel: Out of memory: Killed process 611554 (postgres) …
kernel: Out of memory: Killed process 611555 (postgres) …
kernel: Out of memory: Killed process 611556 (postgres) …
kernel: Out of memory: Killed process 611557 (postgres) …
kernel: Out of memory: Killed process 611559 (postgres) …
kernel: Out of memory: Killed process 611560 (postgres) …
kernel: Out of memory: Killed process 611561 (postgres) …
kernel: Out of memory: Killed process 611562 (postgres) …
kernel: Out of memory: Killed process 613471 (psql) …
kernel: Out of memory: Killed process 613477 (postgres) …
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ce qui explique que le &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pod&lt;/code&gt; a été redémarré. D’un point de vue PostgreSQL, on
peut dire que l’instance a connu un &lt;em&gt;crash&lt;/em&gt;. Elle redémarre donc en mode
&lt;em&gt;recovery&lt;/em&gt;. Dans les traces de PostgreSQL, lors du redémarrage, la ligne
suivante est visible.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nl&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;database system was not properly shut down; automatic recovery in progress
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;cluster-burstable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lors du test sur le deuxième &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cluster&lt;/code&gt;, les mêmes observations sont faites.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Un processus (ici &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python3&lt;/code&gt;) sur le &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Node&lt;/code&gt; demande de la mémoire.&lt;/li&gt;
  &lt;li&gt;Comme l’allocation ne peut pas être faite, ce même programme invoque l’&lt;em&gt;OOM
Killer&lt;/em&gt;. Le programme &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python3&lt;/code&gt; qui tourne sur la machine, n’est pas
responsable du manque de mémoire ;&lt;/li&gt;
  &lt;li&gt;Le processus ciblé est le processus PostgreSQL qui exécute le tri. Il
consomme environ 8 Go de RAM , trop pour les capacités de la machine ;&lt;/li&gt;
  &lt;li&gt;Tous les processus du &lt;em&gt;cgroup&lt;/em&gt; sont évincés ;&lt;/li&gt;
  &lt;li&gt;L’instance redémarre en mode &lt;em&gt;recovery&lt;/em&gt; puis redevient accessible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ceci n’est pas surprenant, puisque nous avons vu que rien ne diffère d’un point
de vue mémoire et sur la configuration &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oom_*&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cluster-guaranteed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pour ce dernier cas, l’&lt;em&gt;OOM Killer&lt;/em&gt; n’est pas invoqué par n’importe quel
processus, mais par un processus &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postgres&lt;/code&gt;, processus interne au conteneur
où est exécuté le tri.&lt;/p&gt;

&lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;go&quot;&gt;kernel: postgres invoked oom-killer: gfp_mask=0xcc0(GFP_KERNEL), order=0, oom_score_adj=0
kernel: CPU: 3 UID: 26 PID: 614252 Comm: postgres …
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Notons le &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pid&lt;/code&gt; du processus : &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;614252&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;On retrouve dans les traces la quantité de mémoire et la limite imposée atteint
par le &lt;em&gt;cgroup&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;go&quot;&gt;kernel: memory: usage 2097152kB, limit 2097152kB, failcnt 871
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Cette limite correspond bien aux 2 Go indiqués dans la définition des resources
du &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cluster&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cluster-guaranteed&lt;/code&gt;. Le journal de traces remonte les processus en
cours au moment de l’invocation de l’&lt;em&gt;OOM Killer&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;go&quot;&gt;kernel: Tasks state (memory values in pages):
kernel: [  pid  ]   uid  tgid total_vm      rss rss_anon rss_file rss_shmem pgtables_bytes swapents oom_score_adj name
kernel: [ 577430]    26 577430      257        1        0        1         0    40960       10          -998 pause
kernel: [ 607179]    26 607179   347284     4631     4622        9         0   266240        0          -997 manager
kernel: [ 607224]    26 607224    56071     4675      643      428      3604   172032        0          -997 postgres
kernel: [ 607225]    26 607225    17249      640      638        2         0   118784        0             0 postgres
kernel: [ 607226]    26 607226    56104     1317      657        2       658   163840        0             0 postgres
kernel: [ 607227]    26 607227    56104      728      653        2        73   135168        0             0 postgres
kernel: [ 607228]    26 607228    56104      873      657        2       214   163840        0             0 postgres
kernel: [ 607229]    26 607229    56106     2172      669        2      1501   151552        0             0 postgres
kernel: [ 607230]    26 607230    56104     1278      655      209       414   143360        0             0 postgres
kernel: [ 607237]    26 607237    56104     1890      656      105      1129   139264        0             0 postgres
kernel: [ 607238]    26 607238    56472     1806      722      758       326   159744        0             0 postgres
kernel: [ 607239]    26 607239    56104     1021      656      264       101   131072        0             0 postgres
kernel: [ 607240]    26 607240    56472      939      716        2       221   143360        0             0 postgres
kernel: [ 614238]    26 614238     4002     1380      278     1102         0    73728        0          -997 psql
kernel: [ 614252]    26 614252   597541   514260   511082     2136      1042  4300800        0             0 postgres
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;En dernière ligne, on retrouve le processus &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;614252&lt;/code&gt; à l’initiative de l’appel
au &lt;em&gt;OOM Killer&lt;/em&gt;. C’est ce processus qui consomme le plus de mémoire, un peu
moins de 2 Go. Au passage, notez que tous les processus enfants à &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postmaster&lt;/code&gt;
ont bien hérité du paramètre &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PG_OOM_ADJUST_VALUE&lt;/code&gt; à &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Le &lt;em&gt;kill&lt;/em&gt; est initié, mais cette fois-ci avec une contrainte différente
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;constraint=CONSTRAINT_MEMCG&lt;/code&gt;. Celle-ci indique que l’éviction d’un processus ne
peut se faire que dans le conteneur en question. Ceci est logique : quel serait
l’intérêt d’arrêter des processus en dehors de ce &lt;em&gt;cgroup&lt;/em&gt; s’il est nécessaire de
retrouver de la mémoire au sein de ce &lt;em&gt;cgroup&lt;/em&gt; ?&lt;/p&gt;

&lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;go&quot;&gt;sept. 21 06:52:05 lenovo-pro kernel: oom-kill:constraint=CONSTRAINT_MEMCG,nodemask=(null),cpuset=cri-containerd-683…,mems_allowed=0,oom_memcg=/system.slice/docker-0d3ac421a88f3823ef43f68cfcad6de7739069b01ff51d2ed918f8659e93702e.scope/kubelet.slice/kubelet-kubepods.slice/kubelet-kubepods-pod34c24b1b_f063_4779_b778_1a490b0cab1b.slice,task_memcg=/system.slice/docker-0d3ac…e2eaa7.scope,task=postgres,pid=614252,uid=26
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Le processus &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;614252&lt;/code&gt; est donc arrêté.&lt;/p&gt;

&lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;go&quot;&gt;kernel: Memory cgroup out of memory: Killed process 614252 (postgres) total-vm:2390164kB, anon-rss:2044328kB, file-rss:8544kB, shmem-rss:4168kB, UID:26 pgtables:4200kB oom_score_adj:0
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Notez que le début de la ligne de trace diffère d’un &lt;em&gt;OOM Kill&lt;/em&gt; global. Ici il
s’agit d’un &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Memory cgroup out of memory&lt;/code&gt; alors que, dans les deux autres
exemples, il s’agissait d’un &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Out of memory&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Là aussi, tous les processus du &lt;em&gt;cgroup&lt;/em&gt; sont évincés comme &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;memory.oom.group&lt;/code&gt;
est utilisé. L’instance redémarre en mode &lt;em&gt;recovery&lt;/em&gt; puis redevient accessible.&lt;/p&gt;

&lt;p&gt;Par ailleurs, il est à noter que dans cet exemple, comme dans ceux d’avant,
tous les processus redémarrent, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postmaster&lt;/code&gt; compris.
En effet, la disparition brusque d’un &lt;em&gt;backend&lt;/em&gt; est suspecte et le processus
principal préfère préserver l’intégrité des données en redémarrant tout.
Là aussi, toutes les
connexions autres qui pouvaient exister sont coupées brutalement et devront être
re-initiées après le redémarrage de l’instance.&lt;/p&gt;

&lt;p&gt;Une différence notable est à souligner. Vous l’avez peut-être compris, mais dans
le cas d’un &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cluster&lt;/code&gt; en QoS &lt;em&gt;Guaranteed&lt;/em&gt;, la consommation RAM n’a pas pu
dépasser les 2 Go (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;limits.memory&lt;/code&gt;), là où avec les autres QoS, la limite de
consommation par le processus de tri a atteint les 8 Go.
La consommation de 8 Go de RAM a eu pour conséquence d’épuiser les ressources du système qui étaient de 16 Go.&lt;/p&gt;

&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Nous l’avons vu, le déploiement de PostgreSQL sur Kubernetes implique des
changements de fonctionnement à très bas niveau, notamment sur la gestion
mémoire. Le diagnostic d’un &lt;em&gt;out of memory&lt;/em&gt; dépend également de la QoS du &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pod&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Cette QoS dépend directement de la configuration des ressources allouées à
celui-ci. CloudNativePG gère une préconisation des développeurs de PostgreSQL en
ce qui concerne le score d’ajustement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oom_score_adj&lt;/code&gt; pour les processus
enfants pour une QoS &lt;em&gt;Guaranteed&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Plusieurs choses sont à retenir :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Si l’&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;overcommit_memory&lt;/code&gt; du &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Node&lt;/code&gt; n’est pas désactivé, l’arrêt d’un processus
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postgres&lt;/code&gt; de type &lt;em&gt;backend&lt;/em&gt; client aura pour conséquence l’arrêt et le
redémarrage de l’instance, peu importe la QoS choisie. La QoS &lt;em&gt;Guaranteed&lt;/em&gt;
limite le risque d’un arrêt brutal de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postmaster&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Cette même QoS vous permet de garder le contrôle sur la consommation mémoire
du &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pod&lt;/code&gt; ;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Et enfin, vous évitez une surconsommation qui pourrait avoir des effets de
bord sur le reste du système. D’ailleurs, nous l’avons vu dans les exemples,
les deux premiers appels &lt;em&gt;OOM Killer&lt;/em&gt; ont été faits par deux outils
sans rapport avec PostgreSQL qui se trouvaient sur le système :
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python3&lt;/code&gt; et &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kube-controller&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;Des questions, des remarques ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;** &lt;a href=&quot;mailto:pierrick.chovelon@dalibo.com?subject=[Commentaire-Blog] CloudNativePG&quot;&gt;Écrivez-nous !&lt;/a&gt;**&lt;/p&gt;
</description>
				<pubDate>Fri, 02 Oct 2026 00:00:00 -0500</pubDate>
				<link>https://blog.dalibo.com/2026/10/02/cnpg-13.html</link>
				<guid isPermaLink="true">https://blog.dalibo.com/2026/10/02/cnpg-13.html</guid>
			</item>
		
			<item>
				<title>Dalibo recrute un⋅e Administrateur/Administratrice Systèmes Senior</title>
				<description>&lt;p&gt;&lt;em&gt;Paris, le 29 septembre 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.dalibo.com/jobs&quot;&gt;Dalibo&lt;/a&gt; est à la recherche d’un⋅e &lt;strong&gt;Administrateur/Administratrice Systèmes&lt;/strong&gt; Senior.&lt;/p&gt;

&lt;!--MORE--&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/img/dalibo_recrute4.png&quot; alt=&quot;visuel recrutement&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;le-poste&quot;&gt;Le poste&lt;/h3&gt;

&lt;p&gt;Compte tenu de la taille de notre structure, votre rôle en tant qu’administrateur systèmes au sein de notre structure sera très polyvalent :&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;assurer la disponibilité, l’intégrité et la sécurité de nos services,&lt;/li&gt;
  &lt;li&gt;contrôler le matériel et l’inventaire informatique,&lt;/li&gt;
  &lt;li&gt;gérer les relations avec les fournisseurs, prestataires et clients concernant le SI de Dalibo,&lt;/li&gt;
  &lt;li&gt;accompagner et former des collègues dans leur utilisation de Linux et des services internes, en diffusant les bonnes pratiques de sécurité,&lt;/li&gt;
  &lt;li&gt;participer aux chantiers de mise en place ou de modification des outils et services informatiques.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Au moins un déplacement trimestriel à Paris est à prévoir, pour une durée d’une semaine.&lt;/p&gt;

&lt;h3 id=&quot;les-compétences-requises&quot;&gt;Les compétences requises&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Système et virtualisation : GNU/Linux, Proxmox, LXC, KVM&lt;/li&gt;
  &lt;li&gt;Sécurité réseaux : VPN, routage, firewall, gestion des accès&lt;/li&gt;
  &lt;li&gt;Automatisation : Ansible, Terraform ou OpenTofu&lt;/li&gt;
  &lt;li&gt;Outils collaboratifs et métier : Git / GitLab / GitHub, messageries instantanées, mail, ERP (Dolibarr)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;les--plus--significatifs&quot;&gt;Les « plus » significatifs&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Gestion d’inventaire&lt;/li&gt;
  &lt;li&gt;Connaissance de l’offre Cloud de Scaleway&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La connaissance exhaustive de tous les outils n’est pas un impératif. Il sera possible de se former au sein de l’équipe.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.welcometothejungle.com/fr/companies/dalibo/jobs/administrateur-rice-systemes-sysadmin-linux-senior_paris&quot;&gt;CLIQUEZ ICI POUR PLUS D’INFORMATIONS&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;les-avantages&quot;&gt;Les avantages&lt;/h3&gt;

&lt;p&gt;Télétravail, possibilité de devenir sociétaire, grille salariale transparente, participation aux bénéfices, contributions aux communautés PostgreSQL et SCOP… Nous offrons un environnement favorable à la montée en compétences et à leur partage, à l’implication et l’émancipation des salarié⋅es, ainsi qu’au respect de la vie privée et familiale. Les détails sont &lt;strong&gt;&lt;a href=&quot;https://dali.bo/jobs&quot;&gt;ici&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;postuler&quot;&gt;Postuler&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;via &lt;a href=&quot;https://www.welcometothejungle.com/fr/companies/dalibo/jobs/administrateur-rice-systemes-sysadmin-linux-senior_paris&quot;&gt;Welcome to the Jungle&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;ou écrire à &lt;a href=&quot;mailto:recrutement@dalibo.com&quot;&gt;recrutement@dalibo.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h4 id=&quot;à-propos-de-dalibo&quot;&gt;À propos de Dalibo&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;https://www.dalibo.com&quot;&gt;DALIBO&lt;/a&gt; est le spécialiste français de PostgreSQL. Actuellement forte de 44 salarié⋅es, dont une majorité d’administrateurs de bases de données (DBA), la société propose un cursus de formation complet aux DBA, ainsi qu’une offre de support spécialement conçue pour s’adapter aux besoins des entreprises en matière de sécurité, performance et pérennité.&lt;/p&gt;

&lt;h4 id=&quot;libriste-et-scop&quot;&gt;Libriste et SCOP&lt;/h4&gt;

&lt;p&gt;Depuis ses débuts, notre PME est engagée auprès de la communauté PostgreSQL en France comme à l’étranger. Non seulement à travers le développement logiciel, mais aussi en participant à des événements, en donnant des conférences libres d’accès, en sponsorisant des projets, etc.&lt;/p&gt;

&lt;p&gt;Dalibo est avant tout un collectif passionné qui a inscrit, en 2011, les principes du &lt;a href=&quot;https://fr.wikipedia.org/wiki/Logiciel_libre&quot;&gt;Libre&lt;/a&gt; dans ses statuts &lt;a href=&quot;https://www.les-scop.coop/les-scop&quot;&gt;coopératifs&lt;/a&gt;.&lt;/p&gt;

</description>
				<pubDate>Tue, 29 Sep 2026 00:00:00 -0500</pubDate>
				<link>https://blog.dalibo.com/2026/09/29/sysadmin.html</link>
				<guid isPermaLink="true">https://blog.dalibo.com/2026/09/29/sysadmin.html</guid>
			</item>
		
			<item>
				<title>Formations Dalibo : le calendrier 2027</title>
				<description>&lt;p&gt;&lt;em&gt;Saint-Étienne, le 24 septembre 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Administration, Développement, Performances et Transition vers PostgreSQL… Dalibo vous propose 10 formations pour vous accompagner dans votre montée en compétences. Voici les prochaines sessions, ainsi que le calendrier 2027. &lt;em&gt;[mise à jour le 30 septembre]&lt;/em&gt;&lt;/p&gt;

&lt;!--MORE--&gt;

&lt;h3 id=&quot;rappels-utiles&quot;&gt;Rappels utiles&lt;/h3&gt;

&lt;figure style=&quot;float: right;padding: 10px;width: 400px;&quot;&gt;
  &lt;img style=&quot;padding: 0;&quot; src=&quot;/img/2024_pgsession16_atelier.png&quot; alt=&quot;Photo de l'Atelier Réplication logique&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;Certifiées Qualiopi, nos formations sont détaillées sur &lt;strong&gt;&lt;a href=&quot;https://dali.bo/manuels_formation&quot;&gt;dalibo.com/formations&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Inter-entreprises et en présentiel, elles durent 2 ou 3 journées.&lt;/p&gt;

&lt;p&gt;Depuis 2020, certaines sessions sont également assurées à distance sur 4 ou 5 matinées, de 9h00 à 12h30.&lt;/p&gt;

&lt;p&gt;Enfin, il est possible d’organiser des sessions en intra-entreprise, au sein de vos locaux.&lt;/p&gt;

&lt;h4 id=&quot;contact&quot;&gt;Contact&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Appelez Jill et Lorraine au + 33 1 83 64 61 88,&lt;/li&gt;
  &lt;li&gt;ou écrivez à &lt;a href=&quot;mailto:formation@dalibo.com&quot;&gt;formation@dalibo.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;le-calendrier-des-sessions&quot;&gt;Le calendrier des sessions&lt;/h3&gt;

&lt;h4 id=&quot;cursus-administration&quot;&gt;Cursus Administration&lt;/h4&gt;

&lt;div style=&quot;float: left; width: 50%; padding-right: 10px;&quot;&gt;
  &lt;p&gt;&lt;a href=&quot;https://dali.bo/dba1&quot;&gt;DBA1&lt;/a&gt; : Administration PostgreSQL&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;5-9 octobre 2026 - à distance&lt;/li&gt;
    &lt;li&gt;17-19 novembre 2026 - à Paris&lt;/li&gt;
    &lt;li&gt;4-8 janvier 2027 - à distance&lt;/li&gt;
    &lt;li&gt;9-11 mars 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;26-30 avril 2027 - à distance&lt;/li&gt;
    &lt;li&gt;7-9 septembre 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;6-10 décembre 2027 - à distance&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div style=&quot;float: right; width: 50%; padding-right: 10px;&quot;&gt;
  &lt;p&gt;&lt;a href=&quot;https://dali.bo/dba2&quot;&gt;DBA2&lt;/a&gt; : Administration PostgreSQL Avancée&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;13-15 octobre 2026 - à Paris&lt;/li&gt;
    &lt;li&gt;30 novembre - 4 décembre 2026 - à distance&lt;/li&gt;
    &lt;li&gt;18-22 janvier 2027 - à distance&lt;/li&gt;
    &lt;li&gt;8-11 février 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;6-8 avril 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;14-18 juin 2027 - à distance&lt;/li&gt;
    &lt;li&gt;5-7 octobre 2027 - à Paris&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;

&lt;div style=&quot;float: left; width: 50%; padding-right: 10px;&quot;&gt;
  &lt;p&gt;&lt;a href=&quot;https://dali.bo/dba3&quot;&gt;DBA3&lt;/a&gt; : Sauvegarde et Réplication avec PostgreSQL&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;24-26 novembre 2026 - à Paris&lt;/li&gt;
    &lt;li&gt;14-18 décembre 2026 - à distance&lt;/li&gt;
    &lt;li&gt;1-5 février 2027 - à distance&lt;/li&gt;
    &lt;li&gt;27-29 avril 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;6-10 septembre 2027 - à distance&lt;/li&gt;
    &lt;li&gt;14-16 décembre 2027 - à Paris&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div style=&quot;float: right; width: 50%; padding-right: 10px;&quot;&gt;
  &lt;p&gt;&lt;a href=&quot;https://dali.bo/hapat&quot;&gt;HAPAT&lt;/a&gt; : Haute disponibilité avec PostgreSQL&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;1-3 décembre 2026 - à Paris&lt;/li&gt;
    &lt;li&gt;23-25 mars 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;31 mai  - 4 juin 2027 - à distance&lt;/li&gt;
    &lt;li&gt;21-23 septembre 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;22-26 novembre 2027 - à distance&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://dali.bo/cnpg1&quot;&gt;CNPG1&lt;/a&gt; : PostgreSQL dans Kubernetes avec CloudNativePG&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;27-28 octobre 2026 - à Paris&lt;/li&gt;
  &lt;li&gt;19-22 janvier 2027 - à distance&lt;/li&gt;
  &lt;li&gt;6-7 avril 2027 - à Paris&lt;/li&gt;
  &lt;li&gt;5-6 octobre 2027 - à Paris&lt;/li&gt;
  &lt;li&gt;7-10 décembre 2027 - à distance&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;cursus-performances&quot;&gt;Cursus Performances&lt;/h4&gt;

&lt;div style=&quot;float: left; width: 50%; padding-right: 10px;&quot;&gt;
  &lt;p&gt;&lt;a href=&quot;https://dali.bo/perf1&quot;&gt;PERF1&lt;/a&gt; : PostgreSQL Performances&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;13-15 octobre 2026 - à Paris&lt;/li&gt;
    &lt;li&gt;16-20 novembre 2026 - à distance&lt;/li&gt;
    &lt;li&gt;8-10 décembre 2026 - à Paris&lt;/li&gt;
    &lt;li&gt;4-8 janvier 2027 - à distance&lt;/li&gt;
    &lt;li&gt;27-29 avril 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;31 mai - 4 juin 2027 - à distance&lt;/li&gt;
    &lt;li&gt;19-21 octobre 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;13-17 décembre 2027 - à distance&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div style=&quot;float: right; width: 50%; padding-right: 10px;&quot;&gt;
  &lt;p&gt;&lt;a href=&quot;https://dali.bo/perf2&quot;&gt;PERF2&lt;/a&gt; : Indexation et SQL Avancés&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;24-25 novembre 2026 - à Paris&lt;/li&gt;
    &lt;li&gt;15-18 décembre 2026 - à distance&lt;/li&gt;
    &lt;li&gt;9-10 février 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;18-21 mai 2027 - à distance&lt;/li&gt;
    &lt;li&gt;28-29 septembre 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;2-5 novembre 2027 - à distance&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;

&lt;h4 id=&quot;cursus-développement&quot;&gt;Cursus Développement&lt;/h4&gt;

&lt;div style=&quot;float: left; width: 50%; padding-right: 10px;&quot;&gt;
  &lt;p&gt;&lt;a href=&quot;https://dali.bo/dev1&quot;&gt;DEV1&lt;/a&gt; : Initiation au langage SQL&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;16-17 mars 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;1-3 juin 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;7-9 septembre 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;23-25 novembre 2027 - à Paris&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div style=&quot;float: right; width: 50%; padding-right: 10px;&quot;&gt;
  &lt;p&gt;&lt;a href=&quot;https://dali.bo/devpg&quot;&gt;DEVPG&lt;/a&gt; : Développer avec SQL&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;22-24 septembre 2026 - à Paris&lt;/li&gt;
    &lt;li&gt;23-25 mars 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;15-17 juin 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;21-23 septembre 2027 - à Paris&lt;/li&gt;
    &lt;li&gt;7-9 décembre 2027 - à Paris&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;

&lt;h4 id=&quot;cursus-transition&quot;&gt;Cursus Transition&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;https://dali.bo/dbaadm&quot;&gt;DBAADM&lt;/a&gt; : Administration PostgreSQL pour DBA expérimentés&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;uniquement en intra-entreprise et en présentiel&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;Des questions, des remarques ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Écrivez-nous à &lt;a href=&quot;mailto:formation@dalibo.com&quot;&gt;formation@dalibo.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
</description>
				<pubDate>Thu, 24 Sep 2026 00:00:00 -0500</pubDate>
				<link>https://blog.dalibo.com/2026/09/24/formations.html</link>
				<guid isPermaLink="true">https://blog.dalibo.com/2026/09/24/formations.html</guid>
			</item>
		
			<item>
				<title>Manuels Dalibo : sortie de la version 26.09</title>
				<description>&lt;p&gt;&lt;em&gt;Saint-Étienne, le 15 septembre 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Les manuels Dalibo sont mis à jour tous les trimestres, toujours en libre accès sous format PDF, ePub et html. Voici les liens vers &lt;strong&gt;leur dernière version 26.09&lt;/strong&gt;.&lt;/p&gt;

&lt;!--MORE--&gt;

&lt;p&gt;&lt;img src=&quot;/img/202609_nouvelles_formations.png&quot; alt=&quot;Couvertures des nouveaux manuels&quot; style=&quot;float: right; padding:10px;width: 380px;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;les-manuels&quot;&gt;Les manuels&lt;/h3&gt;

&lt;p&gt;Comme annoncé dans l’&lt;a href=&quot;https://dali.bo/202609_nouvelles_formations&quot;&gt;article précédent&lt;/a&gt;, cette rentrée est marquée par l’arrivée de &lt;strong&gt;deux nouvelles formations&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;CNPG1, pour apprendre à utiliser et déployer &lt;u&gt;PostgreSQL dans Kubernetes avec CloudNativePG&lt;/u&gt;,&lt;/li&gt;
  &lt;li&gt;DEV1, pour &lt;u&gt;s'initier au langage SQL&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vous retrouverez les liens vers leurs manuels ci-dessous.&lt;/p&gt;

&lt;h4 id=&quot;administration&quot;&gt;Administration&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dali.bo/dba1&quot;&gt;DBA1&lt;/a&gt; - Administration PostgreSQL : &lt;a href=&quot;https://dali.bo/dba1_pdf&quot;&gt;PDF&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/dba1_epub&quot;&gt;ePub&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/dba1_html&quot;&gt;html&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dali.bo/dba2&quot;&gt;DBA2&lt;/a&gt; - Administration PostgreSQL Avancée : &lt;a href=&quot;https://dali.bo/dba2_pdf&quot;&gt;PDF&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/dba2_epub&quot;&gt;ePub&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/dba2_html&quot;&gt;html&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dali.bo/dba3&quot;&gt;DBA3&lt;/a&gt; - Sauvegarde et Réplication avec PostgreSQL : &lt;a href=&quot;https://dali.bo/dba3_pdf&quot;&gt;PDF&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/dba3_epub&quot;&gt;ePub&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/dba3_html&quot;&gt;html&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dali.bo/dbaadm&quot;&gt;DBAADM&lt;/a&gt; - Administration PostgreSQL pour DBA expérimentés : &lt;a href=&quot;https://dali.bo/dbaadm_pdf&quot;&gt;PDF&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/dbaadm_epub&quot;&gt;ePub&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/dbaadm_html&quot;&gt;html&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dali.bo/hapat&quot;&gt;HAPAT&lt;/a&gt; - Haute disponibilité avec PostgreSQL : &lt;a href=&quot;https://dali.bo/hapat_pdf&quot;&gt;PDF&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/hapat_epub&quot;&gt;ePub&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/hapat_html&quot;&gt;html&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.dali.bo/cnpg1&quot;&gt;CNPG1&lt;/a&gt; - PostgreSQL dans Kubernetes avec CloudNativePG : &lt;a href=&quot;https://dali.bo/cnpg_pdf&quot;&gt;PDF&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/cnpg_epub&quot;&gt;ePub&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/cnpg_html&quot;&gt;html&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;développement&quot;&gt;Développement&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dali.bo/dev1&quot;&gt;DEV1&lt;/a&gt; - Initiation au langage SQL : &lt;a href=&quot;https://dali.bo/dev1_pdf&quot;&gt;PDF&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/dev1_epub&quot;&gt;ePub&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/dev1_html&quot;&gt;html&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dali.bo/devpg&quot;&gt;DEVPG&lt;/a&gt; - Développer avec SQL : &lt;a href=&quot;https://dali.bo/devpg_pdf&quot;&gt;PDF&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/devpg_epub&quot;&gt;ePub&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/devpg_html&quot;&gt;html&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;performances&quot;&gt;Performances&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dali.bo/perf1&quot;&gt;PERF1&lt;/a&gt; - PostgreSQL Performances : &lt;a href=&quot;https://dali.bo/perf1_pdf&quot;&gt;PDF&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/perf1_epub&quot;&gt;ePub&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/perf1_html&quot;&gt;html&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dali.bo/perf2&quot;&gt;PERF2&lt;/a&gt; - Indexation et SQL Avancés : &lt;a href=&quot;https://dali.bo/perf2_pdf&quot;&gt;PDF&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/perf2_epub&quot;&gt;ePub&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/perf2_html&quot;&gt;html&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;transition-vers-postgresql&quot;&gt;Transition vers PostgreSQL&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://dali.bo/dbaadm&quot;&gt;DBAADM&lt;/a&gt; - Administration PostgreSQL pour DBA expérientés : &lt;a href=&quot;https://dali.bo/dbaadm_pdf&quot;&gt;PDF&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/dbaadm_epub&quot;&gt;ePub&lt;/a&gt;, &lt;a href=&quot;https://dali.bo/dbaadm_html&quot;&gt;html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div style=&quot;margin-bottom: 20px;&quot;&gt;&lt;/div&gt;

&lt;h3 id=&quot;rappels-utiles&quot;&gt;Rappels utiles&lt;/h3&gt;

&lt;p&gt;Revue des cours, nouveaux TP et quiz, correctifs… La mise à jour des manuels est assurée nos DBA, par ailleurs formateurs et consultants.&lt;/p&gt;

&lt;p&gt;Les informations principales concernant les formations Dalibo sont &lt;a href=&quot;https://www.dalibo.com/formations&quot;&gt;ici&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Si vous notez des éléments qui demandent à être clarifiés, précisés, corrigés, vous pouvez nous écrire à &lt;a href=&quot;mailto:formation@dalibo.com&quot;&gt;formation@dalibo.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Les manuels sont publiés sous la licence &lt;a href=&quot;https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr&quot;&gt;CC BY-NC-SA&lt;/a&gt; qui autorise l’utilisation &lt;strong&gt;non commerciale&lt;/strong&gt;, le partage dans les mêmes conditions et la modification, à condition de créditer Dalibo.&lt;/p&gt;

&lt;h4 id=&quot;le-privilège-des-stagiaires&quot;&gt;Le privilège des stagiaires&lt;/h4&gt;

&lt;p&gt;Ces manuels ne sont pas commercialisés. Cependant, en vous inscrivant à une formation Dalibo, vous recevrez un code pour commander gratuitement l’impression et la livraison à domicile de deux manuels de votre choix.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;Des questions, des remarques ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Écrivez-nous à &lt;a href=&quot;mailto:formation@dalibo.com&quot;&gt;formation@dalibo.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
</description>
				<pubDate>Tue, 15 Sep 2026 00:00:00 -0500</pubDate>
				<link>https://blog.dalibo.com/2026/09/15/manuels.html</link>
				<guid isPermaLink="true">https://blog.dalibo.com/2026/09/15/manuels.html</guid>
			</item>
		
			<item>
				<title>Formations Dalibo : découvrez CloudNativePG et SQL</title>
				<description>&lt;p&gt;&lt;em&gt;Saint-Étienne, le 10 septembre 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;La famille des formations Dalibo s’agrandit ! Nos DBA et développeurs en ont conçu deux nouvelles : CNPG1 pour découvrir l’opérateur Kubernetes &lt;strong&gt;CloudNativePG&lt;/strong&gt;, et DEV1 pour s’initier au &lt;strong&gt;langage SQL&lt;/strong&gt;.&lt;/p&gt;

&lt;!--MORE--&gt;

&lt;h3 id=&quot;cnpg1--postgresql-dans-kubernetes-avec-cloudnativepg&quot;&gt;CNPG1 : PostgreSQL dans Kubernetes avec CloudNativePG&lt;/h3&gt;

&lt;p&gt;Cette nouvelle formation destinée aux DBA et aux DevOps s’inspire du workshop déjà présenté en mars dernier (Cf. &lt;a href=&quot;https://dali.bo/202603_wkp-cnpg&quot;&gt;notre article&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Son objectif principal est de présenter l’utilisation et le déploiement de PostgreSQL dans Kubernetes avec l’opérateur CloudNativePG : création, configuration, supervision et mise à jour de clusters, politique de sauvegarde, haute disponibilité. &lt;a href=&quot;https://dali.bo/cnpg1&quot;&gt;Plus d’infos ici&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prochaines sessions&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;27-28 octobre 2026, à Paris&lt;/li&gt;
  &lt;li&gt;19-20 janvier 2027, à Paris&lt;/li&gt;
  &lt;li&gt;du 6 au 9 avril 2027, à distance&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;dev1--initiation-au-langage-sql&quot;&gt;DEV1 : Initiation au langage SQL&lt;/h3&gt;

&lt;p&gt;Vous avez besoin d’acquérir ou d’améliorer vos compétences en SQL ?&lt;/p&gt;

&lt;p&gt;Cette autre nouvelle formation vous permettra de comprendre le modèle relationnel et la structure d’un schéma, de savoir également comment ajouter, modifier, supprimer, extraire et sécuriser des données. 
Vous apprendrez également à écrire des requêtes SQL complexes. &lt;a href=&quot;https://dali.bo/dev1&quot;&gt;Plus d’infos ici&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prochaines sessions&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;du 2 au 4 février 2027, à Paris&lt;/li&gt;
  &lt;li&gt;du 1er au 3 juin 2027, à Paris&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;rappels-utiles&quot;&gt;Rappels utiles&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/img/portraits_formation.png&quot; alt=&quot;Jill &amp;amp; Lorraine&quot; style=&quot;float: right; padding:10px;width: 280px;&quot; /&gt;
Certifiées Qualiopi, nos 10 formations sont détaillées sur &lt;strong&gt;&lt;a href=&quot;https://dali.bo/manuels_formation&quot;&gt;dalibo.com/formations&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Elles se divisent en 4 cursus : Administration, Performances, Développement et Transition vers PostgreSQL.&lt;/p&gt;

&lt;p&gt;Inter-entreprises et en présentiel, elles durent 2 ou 3 journées. Depuis 2020, certaines sessions sont aussi assurées à distance sur 4 ou 5 matinées, de 9h00 à 12h30.&lt;/p&gt;

&lt;p&gt;Besoin d’un renseignement ? Vous souhaitez vous inscrire ?
Appelez Jill et Lorraine au + 33 1 83 64 61 88, ou écrivez à &lt;a href=&quot;mailto:formation@dalibo.com&quot;&gt;formation@dalibo.com&lt;/a&gt;.&lt;/p&gt;

</description>
				<pubDate>Thu, 10 Sep 2026 00:00:00 -0500</pubDate>
				<link>https://blog.dalibo.com/2026/09/10/formations.html</link>
				<guid isPermaLink="true">https://blog.dalibo.com/2026/09/10/formations.html</guid>
			</item>
		
			<item>
				<title>PostgreSQL Migrator 1.0 stable</title>
				<description>&lt;p&gt;&lt;em&gt;Paris, le 7 septembre 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Après un an de bêta,
Dalibo annonce &lt;strong&gt;PostgreSQL Migrator 1.0 stable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;PostgreSQL Migrator est un outil de conversion et de migration de base de données vers PostgreSQL.
Nous souhaitons apporter un grand vent de modernisation dans ce domaine stratégique pour de nombreuses équipes.
Cette version prend déjà en charge les systèmes Oracle et MySQL/MariaDB.&lt;/p&gt;

&lt;p&gt;Vous souhaitez moderniser ou libérer vos données grâce à PostgreSQL ?
&lt;a href=&quot;https://postgresql-migrator.readthedocs.org&quot;&gt;PostgreSQL Migrator&lt;/a&gt; vous intéressera sûrement !&lt;/p&gt;

&lt;!--MORE--&gt;

&lt;h2 id=&quot;fonctionnalités&quot;&gt;Fonctionnalités&lt;/h2&gt;

&lt;p&gt;PostgreSQL Migrator 1.0 profite de notre expertise reconnue dans la communauté.
Plusieurs fonctionnalités en font un compagnon de choix
dans vos chantiers de modernisation :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;installation très simple,&lt;/li&gt;
  &lt;li&gt;inspection optimisée une fois pour toutes,&lt;/li&gt;
  &lt;li&gt;navigation efficace dans le projet de migration,&lt;/li&gt;
  &lt;li&gt;configuration TOML simple et extensible,&lt;/li&gt;
  &lt;li&gt;analyse syntaxique et transpilation de chaque bout de code dans votre modèle,&lt;/li&gt;
  &lt;li&gt;et transfert performant des données.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;text-align: center; margin: 2em;&quot;&gt;&lt;img src=&quot;/img/2026_postgresql-migrator_overview.png&quot; alt=&quot;Page d'accueil de PostgreSQL Migrator&quot; style=&quot;padding: 0; box-shadow: 0 0 1em gray;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Pour cette version 1.0, l’inspection des objets est complète.
PostgreSQL Migrator 1.0 sait convertir et migrer les rôles, les schémas, les séquences, les tables, les index et les contraintes.
Pour la donnée, PostgreSQL Migrator sait migrer les données scalaires, JSON, LOB et convertir les colonnes booléennes.&lt;/p&gt;

&lt;h2 id=&quot;une-interface-efficace&quot;&gt;Une interface efficace&lt;/h2&gt;

&lt;p&gt;Ce logiciel s’adresse aux DBA venant d’autres systèmes.
La détection et la présentation des incompatibilités
et des alternatives dans PostgreSQL
sont une étape majeure pour envisager la migration.
PostgreSQL Migrator propose une navigation efficace dans le modèle de base de données
tant de la source — Oracle ou MySQL — que du futur modèle à créer dans PostgreSQL.&lt;/p&gt;

&lt;p style=&quot;text-align: center; margin: 2em;&quot;&gt;&lt;img src=&quot;/img/2026_postgresql-migrator_annotations.png&quot; alt=&quot;Navigation thématique dans PostgreSQL Migrator&quot; style=&quot;padding: 0; box-shadow: 0 0 1em gray;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;L’interface propose
une navigation thématique ou hiérarchique,
une recherche globale,
des onglets
et l’identification des blocages à la migration.
Contrairement aux logiciels historiques de base de données,
PostgreSQL Migrator offre une interface épurée et intelligente
plutôt qu’une pléthore de boutons et de boîtes de dialogue.
Le transfert se fait en ligne de commande.&lt;/p&gt;

&lt;h2 id=&quot;migration-performante&quot;&gt;Migration performante&lt;/h2&gt;

&lt;p&gt;Pour une copie très efficace,
PostgreSQL Migrator réalise les transferts avec des instructions COPY uniquement.
Nous sommes convaincus
que les exports au format texte avec INSERT
ou à l’aide des &lt;em&gt;Foreign Data Wrapper&lt;/em&gt;
ne seront jamais pertinents pour un chantier de migration.
L’outil écrit les données d’entrée de la commande COPY
au fur et à mesure de leur lecture depuis la source,
même pour les LOB et autres grosses données.&lt;/p&gt;

&lt;p&gt;Non seulement la consommation mémoire est stable sous les 500 Mo,
mais PostgreSQL reçoit les données au plus tôt.
Nos tests présentent un débit global 10 fois supérieur
aux alternatives libres comme Ora2pg.
Aucune extension n’est requise dans l’instance PostgreSQL cible.&lt;/p&gt;

&lt;p&gt;PostgreSQL Migrator orchestre précisément les nombreuses tâches de création d’objet et de copie
pour garantir la cohérence du processus de migration
et l’utilisation optimale des ressources.&lt;/p&gt;

&lt;h2 id=&quot;stable-et-éprouvé&quot;&gt;Stable et éprouvé&lt;/h2&gt;

&lt;p&gt;Malgré sa jeunesse,
PostgreSQL Migrator offre une excellente stabilité.
Le projet dispose d’une intégration continue exigeante
et de méthodes de développement garantissant les non-régressions.
Nous testons PostgreSQL Migrator sur des projets Open Source réels,
pas seulement sur des petites bases de formation.
D’ores et déjà, PostgreSQL Migrator a migré des bases de production.
L’investissement qualité est réel et les premiers retours sont très concluants.&lt;/p&gt;

&lt;h2 id=&quot;libre-et-documenté&quot;&gt;Libre et documenté&lt;/h2&gt;

&lt;p&gt;PostgreSQL Migrator est écrit en Go
et ne dépend pas des bibliothèques propriétaires d’Oracle.
Comme tous les logiciels &lt;a href=&quot;https://labs.dalibo.com&quot;&gt;Dalibo Labs&lt;/a&gt;,
PostgreSQL Migrator est intégralement sous licence PostgreSQL.
Pas de &lt;em&gt;petites lignes&lt;/em&gt; en bas de page !&lt;/p&gt;

&lt;p&gt;La &lt;a href=&quot;https://postgresql-migrator.readthedocs.org&quot;&gt;page du projet&lt;/a&gt; propose
un guide pour installer et essayer l’outil,
la documentation de la configuration et de la ligne de commande,
les fonctionnalités supportées et planifiées,
l’actualité des développements.&lt;/p&gt;

&lt;h2 id=&quot;utiliser-contribuer&quot;&gt;Utiliser, contribuer&lt;/h2&gt;

&lt;p&gt;PostgreSQL Migrator 1.0 n’est que le premier jalon d’une longue feuille de route.
Rapidement, PostgreSQL Migrator migrera les vues, les triggers et les partitions ;
l’inspection et la transpilation sont déjà en place.
Comme PostgreSQL lui-même,
PostgreSQL Migrator implémente les fonctionnalités brique par brique
avec le souci de la maintenabilité, de la stabilité et de la qualité.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://dalibo.com/migration&quot;&gt;Dalibo&lt;/a&gt; propose depuis longtemps une offre commerciale pour migrer vos bases les plus complexes
depuis tous les SGBD concurrents.
Une longue histoire de contributions illustre cette expertise : Ora2pg, data2pg,
&lt;a href=&quot;https://gitlab.com/dalibo/transqlate&quot;&gt;transqlate&lt;/a&gt; et maintenant PostgreSQL Migrator.&lt;/p&gt;

&lt;p&gt;Beaucoup d’outils de migration sont propriétaires,
Dalibo offre une contribution généreuse à la communauté.&lt;/p&gt;

&lt;p&gt;Pour commencer dès maintenant, &lt;a href=&quot;https://postgresql-migrator.readthedocs.io/en/latest/guides/getstarted/&quot;&gt;suivez le guide&lt;/a&gt;.&lt;/p&gt;
</description>
				<pubDate>Mon, 07 Sep 2026 00:00:00 -0500</pubDate>
				<link>https://blog.dalibo.com/2026/09/07/postgresql-migrator-1.html</link>
				<guid isPermaLink="true">https://blog.dalibo.com/2026/09/07/postgresql-migrator-1.html</guid>
			</item>
		
			<item>
				<title>PostgreSQL Migrator 1.0 stable</title>
				<description>&lt;p&gt;&lt;em&gt;Paris, September 7, 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After a year of beta,
Dalibo announces &lt;strong&gt;PostgreSQL Migrator 1.0 stable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;PostgreSQL Migrator is a tool for converting and migrating databases to PostgreSQL.
We aim to bring a strong breath of modernization to this strategic area for many teams.
This release already supports Oracle and MySQL/MariaDB systems.&lt;/p&gt;

&lt;p&gt;Do you want to modernize or free your data with PostgreSQL?
&lt;a href=&quot;https://postgresql-migrator.readthedocs.org&quot;&gt;PostgreSQL Migrator&lt;/a&gt; will surely be of interest to you!&lt;/p&gt;

&lt;!--MORE--&gt;

&lt;h2 id=&quot;features&quot;&gt;Features&lt;/h2&gt;

&lt;p&gt;PostgreSQL Migrator 1.0 benefits from our recognized expertise within the community.
Several features make it a companion of choice
in your modernization projects:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;very simple installation,&lt;/li&gt;
  &lt;li&gt;inspection optimized once and for all,&lt;/li&gt;
  &lt;li&gt;effective navigation through the migration project,&lt;/li&gt;
  &lt;li&gt;simple and tweakable TOML configuration,&lt;/li&gt;
  &lt;li&gt;parsing and transpilation of every piece of code in your model,&lt;/li&gt;
  &lt;li&gt;and high-performance data transfer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;text-align: center; margin: 2em;&quot;&gt;&lt;img src=&quot;/img/2026_postgresql-migrator_overview.png&quot; alt=&quot;PostgreSQL Migrator home page&quot; style=&quot;padding: 0; box-shadow: 0 0 1em gray;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For this 1.0 release, object inspection is complete.
PostgreSQL Migrator 1.0 can convert and migrate roles, schemas, sequences, tables, indexes and constraints.
For data, PostgreSQL Migrator can migrate scalar, JSON and LOB data and convert boolean columns.&lt;/p&gt;

&lt;h2 id=&quot;an-effective-interface&quot;&gt;An effective interface&lt;/h2&gt;

&lt;p&gt;This software is aimed at DBAs coming from other systems.
Detecting and presenting incompatibilities
and alternatives in PostgreSQL
is a major step in considering a migration.
PostgreSQL Migrator offers effective navigation through the database model,
both of the source — Oracle or MySQL — and of the future model to be created in PostgreSQL.&lt;/p&gt;

&lt;p style=&quot;text-align: center; margin: 2em;&quot;&gt;&lt;img src=&quot;/img/2026_postgresql-migrator_annotations.png&quot; alt=&quot;Thematic navigation in PostgreSQL Migrator&quot; style=&quot;padding: 0; box-shadow: 0 0 1em gray;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The interface offers
thematic or hierarchical navigation,
a global search,
tabs
and the identification of migration blockers.
Unlike legacy database software,
PostgreSQL Migrator offers a clean and intelligent interface
rather than a plethora of buttons and dialog boxes.
Transfer is done using CLI.&lt;/p&gt;

&lt;h2 id=&quot;high-performance-migration&quot;&gt;High-performance migration&lt;/h2&gt;

&lt;p&gt;To achieve a very efficient copy,
PostgreSQL Migrator performs transfers using COPY statements only.
We are convinced
that exports in text format with INSERT
or using &lt;em&gt;Foreign Data Wrappers&lt;/em&gt;
will never be relevant for a migration project.
The tool writes the input data of the COPY command
as it is read from the source,
even for LOBs and other large data.&lt;/p&gt;

&lt;p&gt;Not only is memory usage stable below 500 MB,
but PostgreSQL receives the data as early as possible.
Our tests show an overall throughput 10 times higher
than free alternatives like Ora2pg.
No extension is required in the target PostgreSQL instance.&lt;/p&gt;

&lt;p&gt;PostgreSQL Migrator precisely orchestrates the many object-creation and copy tasks
to guarantee the consistency of the migration process
and the optimal use of resources.&lt;/p&gt;

&lt;h2 id=&quot;stable-and-proven&quot;&gt;Stable and proven&lt;/h2&gt;

&lt;p&gt;Despite its youth,
PostgreSQL Migrator offers excellent stability.
The project has a demanding continuous integration
and development methods that guarantee non-regression.
We test PostgreSQL Migrator on real Open Source projects,
not just on small training databases.
PostgreSQL Migrator has already migrated production databases.
The investment in quality is real and the first feedback is very conclusive.&lt;/p&gt;

&lt;h2 id=&quot;free-and-documented&quot;&gt;Free and documented&lt;/h2&gt;

&lt;p&gt;PostgreSQL Migrator is written in Go
and does not depend on Oracle’s proprietary libraries.
Like all &lt;a href=&quot;https://labs.dalibo.com&quot;&gt;Dalibo Labs&lt;/a&gt; software,
PostgreSQL Migrator is entirely under the PostgreSQL license.
No &lt;em&gt;fine print&lt;/em&gt; at the bottom of the page!&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://postgresql-migrator.readthedocs.org&quot;&gt;project page&lt;/a&gt; offers
a guide to install and try out the tool,
the documentation for the configuration and the command line,
the supported and planned features,
and news about the developments.&lt;/p&gt;

&lt;h2 id=&quot;use-contribute&quot;&gt;Use, contribute&lt;/h2&gt;

&lt;p&gt;PostgreSQL Migrator 1.0 is only the first milestone on a long roadmap.
Soon, PostgreSQL Migrator will migrate views, triggers and partitions;
inspection and transpilation are already in place.
Like PostgreSQL itself,
PostgreSQL Migrator implements features brick by brick
with a focus on maintainability, stability and quality.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://dalibo.com/migration&quot;&gt;Dalibo&lt;/a&gt; has long offered a commercial service to migrate your most complex databases
from all competing DBMS.
A long history of contributions illustrates this expertise: Ora2pg, data2pg,
&lt;a href=&quot;https://gitlab.com/dalibo/transqlate&quot;&gt;transqlate&lt;/a&gt; and now PostgreSQL Migrator.&lt;/p&gt;

&lt;p&gt;Many migration tools are proprietary;
Dalibo offers a generous contribution to the community.&lt;/p&gt;

&lt;p&gt;To get started right now, &lt;a href=&quot;https://postgresql-migrator.readthedocs.io/en/latest/guides/getstarted/&quot;&gt;follow the guide&lt;/a&gt;.&lt;/p&gt;
</description>
				<pubDate>Mon, 07 Sep 2026 00:00:00 -0500</pubDate>
				<link>https://blog.dalibo.com/2026/09/07/postgresql-migrator-1-en.html</link>
				<guid isPermaLink="true">https://blog.dalibo.com/2026/09/07/postgresql-migrator-1-en.html</guid>
			</item>
		
			<item>
				<title>PostgreSQL : suivre son actualité avec nos newsletters</title>
				<description>&lt;p&gt;&lt;em&gt;Saint-Étienne, le 18 août 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pour Dalibo, j’édite et diffuse trois &lt;strong&gt;newsletters&lt;/strong&gt; consacrées à des sujets d’actualité autour de PostgreSQL, dont les projets développés en interne, la vie communautaire et coopérative, les formations et les PGSessions de Dalibo.&lt;/p&gt;

&lt;p&gt;Voici les principales caractéristiques de ces newsletters, et leur modalité d’abonnement.&lt;/p&gt;

&lt;!--MORE--&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;trois-newsletters&quot;&gt;Trois newsletters&lt;/h3&gt;

&lt;figure style=&quot;float: right;padding: 10px;width: 150px;&quot;&gt;
  &lt;img style=&quot;padding: 0;&quot; src=&quot;/img/portrait_laura-nb.png&quot; alt=&quot;Laura&quot; /&gt;
  &lt;figcaption style=&quot;font-size: 12px;text-align: center; font-style: italic;&quot;&gt;Laura, chargée de communication et associée&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Actualités PostgreSQL&lt;/strong&gt; : mensuelle (sauf en été), elle reprend les derniers articles publiés sur ce blog-même. Les sujets abordés sont variés, ils concernent aussi bien PostgreSQL et ses logiciels satellites que les événements, les formations, et la vie coopérative de Dalibo. C’est la lettre d’info la plus « générale ».&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Formation&lt;/strong&gt; : moins fréquemment diffusée, celle-ci relaie surtout l’actualité des formations et workshops autour de PostgreSQL, dispensés par nos DBA consultants et formateurs. Vous y trouverez également les liens vers les manuels Dalibo - en libre accès - à l’occasion de leurs mises à jour.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;PGSessions&lt;/strong&gt; : à raison de 4-5 numéros par an, cette newsletter était jusqu’à présent réservée aux participants à la PGSession (avec leur accord explicite). Elle promeut notre événement annuel en communiquant essentiellement les prochaines dates, les modalités d’inscription et le programme, les vidéos en replay.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour vous abonner, écrivez-nous à &lt;a href=&quot;mailto:communication@dalibo.com?subject=[newsletter] inscription&quot;&gt;communication@dalibo.com&lt;/a&gt; en précisant vos noms/prénoms, ainsi que la ou les newsletters qui vous intéressent.&lt;/p&gt;

&lt;h3 id=&quot;le-logiciel-utilisé&quot;&gt;Le logiciel utilisé&lt;/h3&gt;

&lt;p&gt;Afin d’améliorer nos pratiques en communication, nous avons choisi de migrer vers &lt;a href=&quot;https://www.user.com/fr&quot;&gt;Sarbacane&lt;/a&gt;, une solution éditée par Positive Group France.&lt;/p&gt;

&lt;p&gt;En effet, cette entreprise basée en France développe et maintient ses propres logiciels en interne.&lt;/p&gt;

&lt;p&gt;Outre la conformité de ses services à la réglementation européenne, elle facilite également notre propre respect du RGPD en hébergeant les données de nos futures campagnes en Europe, chez OVH.&lt;/p&gt;

&lt;p&gt;De notre côté, nous renonçons aux services de statistiques et de traçage, ainsi qu’à l’aide rédactionnelle de l’IA.&lt;/p&gt;

&lt;p&gt;En communication, la sobriété est l’un des atouts qui facilite le respect des données personnelles.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;Des questions, des remarques ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Écrivez-nous à &lt;a href=&quot;mailto:communication@dalibo.com&quot;&gt;communication@dalibo.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
</description>
				<pubDate>Tue, 18 Aug 2026 00:00:00 -0500</pubDate>
				<link>https://blog.dalibo.com/2026/08/18/newsletters.html</link>
				<guid isPermaLink="true">https://blog.dalibo.com/2026/08/18/newsletters.html</guid>
			</item>
		
			<item>
				<title>Sortie de PostgreSQL 18.6, 17.11, 16.15, 15.19, 14.24 et 19 bêta 3</title>
				<description>&lt;p&gt;&lt;em&gt;Brive La Gaillarde, le 13 août 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Le PostgreSQL Global Development Group a publié le 13 août &lt;strong&gt;&lt;a href=&quot;https://www.postgresql.org/about/news/postgresql-186-1711-1615-1519-1424-and-19-beta-3-released-3365/&quot;&gt;une mise à
jour&lt;/a&gt;&lt;/strong&gt;
pour toutes les versions supportées de PostgreSQL, c’est-à-dire les versions
18.6, 17.11, 16.15, 15.19, 14.24. Cette mise à jour corrige 28 vulnérabilités de 
sécurité et plus de 110 bugs.
Cette mise à jour saute une version mineure de PostgreSQL 18, passant de la 18.4 à la 18.6.
La version 18.5 n’a pas vu le jour suite à un problème de régression.&lt;/p&gt;

&lt;p&gt;Après la mise à jour, trois points peuvent nécessiter des opérations supplémentaires décrites plus bas. Ce sont :&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;la création parallélisée des index GIN&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;btree_gist&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ltree&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour la liste complète, voir les &lt;a href=&quot;https://www.postgresql.org/docs/release/&quot;&gt;Notes de version&lt;/a&gt;.&lt;/p&gt;

&lt;!--MORE--&gt;

&lt;p&gt;&lt;img src=&quot;/img/202608_annonce_release.png&quot; alt=&quot;visuel annonce&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;annonce-de-fin-de-vie-de-postgresql-14&quot;&gt;Annonce de fin de vie de PostgreSQL 14&lt;/h3&gt;

&lt;p&gt;PostgreSQL 14 ne recevra plus de mises à jour après le 12 novembre 2026. Si vous
utilisez PostgreSQL 14 en production, nous vous conseillons de planifier une
migration vers une version plus récente et supportée. Voir la politique de
versionnement pour plus de détails.&lt;/p&gt;

&lt;h3 id=&quot;failles-de-sécurité&quot;&gt;Failles de sécurité&lt;/h3&gt;

&lt;h4 id=&quot;cve-2026-6464-un-échec-précoce-de-copy-from-stdin-dans-psql-traite-les-lignes-de-données-comme-des-commandes-psql&quot;&gt;CVE-2026-6464: Un échec précoce de COPY FROM STDIN dans psql traite les lignes de données comme des commandes psql&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.1&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
L’inclusion de données non fiables dans la commande &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;COPY&lt;/code&gt; de psql peut
permettre à un administrateur du serveur de provoquer l’exécution de lignes de
données en tant que commandes psql, via une injection d’erreur. Si la commande
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;COPY FROM STDIN&lt;/code&gt; ou &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\copy FROM STDIN&lt;/code&gt; échoue avant que le serveur n’indique
qu’il attend des lignes en entrée, psql traite les lignes de données intégrées
au script comme des commandes psql. Un &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;COPY FROM&lt;/code&gt; avec un nom de fichier n’est pas
concerné. L’administrateur du serveur n’a pas de contrôle intrinsèque sur les
lignes de données, une attaque complète nécessite donc que l’attaquant prenne le
contrôle à la fois du serveur et des lignes à charger. Ou encore, un attaquant contrôlant
uniquement ces lignes pourrait parvenir à ses fins à la
faveur d’une erreur fortuite. Les versions antérieures à
PostgreSQL 18.5, 17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-6469-la-commande-alter-table-alter-type-réinitialise-le-propriétaire-des-statistiques-étendues&quot;&gt;CVE-2026-6469: La commande ALTER TABLE ALTER TYPE réinitialise le propriétaire des statistiques étendues&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 3.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Dans la commande &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ALTER TABLE ALTER TYPE&lt;/code&gt;, une affectation incorrecte du propriétaire 
réattribue à l’utilisateur courant la propriété des objets statistiques dépendants.
Cela autorise à tort le propriétaire de la table à
exécuter les commandes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DROP STATISTICS&lt;/code&gt; et &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ALTER STATISTICS&lt;/code&gt;, et
les interdit à tort au propriétaire précédent. La commande 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DROP TABLE&lt;/code&gt; reste capable de supprimer les objets statistiques, donc cette faille n’a 
aucun effet dans de nombreux cas de figure. Les versions antérieures à PostgreSQL 18.5,
17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-6470-postgresql-ne-vérifie-pas-le-droit-usage-sur-un-type&quot;&gt;CVE-2026-6470: PostgreSQL ne vérifie pas le droit USAGE sur un type&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 4.3&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Une autorisation manque dans les commandes DDL de PostgreSQL.
Le créateur d’un objet peut alors créer une dépendance sur un type,
et, via les commandes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ALTER&lt;/code&gt; et &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DROP&lt;/code&gt; du type
provoquer un déni de service. La plupart des opérations
DDL vérifiaient bien ce droit, mais deux d’entre elles ne le faisaient
pas : l’affectation d’un sous-type de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;range&lt;/code&gt;, et le référencement du type depuis
une expression SQL. Les versions antérieures à PostgreSQL 18.5, 17.11, 16.15,
15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-6471-le-décodage-logique-de-postgresql-peut-charger-un-fichier-arbitraire-via-dlopen&quot;&gt;CVE-2026-6471: Le décodage logique de PostgreSQL peut charger un fichier arbitraire via dlopen&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 7.2&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Une autorisation est manquante dans le décodage logique de PostgreSQL.
Un utilisateur non superutilisateur disposant du droit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;REPLICATION&lt;/code&gt;
peut alors charger, via
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dlopen&lt;/code&gt;, n’importe quel fichier visible depuis le compte système sous lequel s’exécute 
le serveur, en choisissant le bon plugin de décodage logique, et ensuite
d’exécuter du code arbitraire sous ce compte. Les versions antérieures à
PostgreSQL 18.5, 17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14662-les-types-tsvector-et-tsquery-sous-dimensionnent-des-allocations-à-cause-dun-débordement-dentier&quot;&gt;CVE-2026-14662: Les types tsvector et tsquery sous-dimensionnent des allocations à cause d’un débordement d’entier&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Dans les fonctions concernant les types de données &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tsvector&lt;/code&gt; et &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tsquery&lt;/code&gt;,
un débordement d’entier permet 
à un utilisateur non privilégié de forcer le serveur à
sous-dimensionner une allocation et à écrire hors limites, via des entrées
volumineuses spécialement conçues. Il peut alors exécuter un code
arbitraire en tant qu’utilisateur du système d’exploitation exécutant la base de
données. Ces types proviennent généralement de la logique applicative et non des
utilisateurs de l’application : une attaque menée par un utilisateur final en
utilisant l’application comme relai est donc peu probable. La CVE-2026-6473
avait corrigé des problèmes similaires. Les versions antérieures à PostgreSQL
18.5, 17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14663-pgcrypto-chiffre-et-déchiffre-silencieusement-en-clair-pour-les-algorithmes-de-chiffrement-désactivés-par-openssl&quot;&gt;CVE-2026-14663: pgcrypto chiffre et déchiffre silencieusement en clair pour les algorithmes de chiffrement désactivés par OpenSSL&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 6.5&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Le stockage en clair opéré par pgcrypto pour les algorithmes de chiffrement
désactivés permet aux utilisateurs de récupérer les données en clair, par 
lecture directe du texte chiffré défectueux. La version d’OpenSSL et sa
configuration déterminent les algorithmes désactivés. Si l’application
accepte des données chiffrées en entrée, le déchiffrement réussira même avec
une mauvaise clé. Cela fait perdre la modeste protection apportée par le
Modification Detection Code (MDC). Les fonctions concernées sont
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pgp_sym_encrypt&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pgp_sym_decrypt&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pgp_pub_encrypt&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pgp_pub_decrypt&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pgp_sym_encrypt_bytea&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pgp_sym_decrypt_bytea&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pgp_pub_encrypt_bytea&lt;/code&gt; et
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pgp_pub_decrypt_bytea&lt;/code&gt;. Les versions antérieures à PostgreSQL 18.5, 17.11,
16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14664-un-dépassement-de-heap-buffer-permet-lexécution-de-code-arbitraire&quot;&gt;CVE-2026-14664: Un dépassement de heap buffer permet l’exécution de code arbitraire&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Un dépassement de heap buffer dans le moteur d’expressions rationnelles de
PostgreSQL permet à l’auteur d’une requête d’exécuter du code arbitraire en tant
qu’utilisateur du système d’exploitation exécutant la base de données, via un
texte qui ne passerait pas la validation d’encodage. Ce problème est de la même
famille que la CVE-2026-2006, mais il implique ici une croissance non prévue des
données lors d’un aller-retour à travers &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_wchar&lt;/code&gt;. Les versions antérieures à
PostgreSQL 18.5, 17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14666-le-cache-du-row-level-security-ignore-les-modifications-des-rôles&quot;&gt;CVE-2026-14666: Le cache du row level security ignore les modifications des rôles&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 4.2&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Le suivi des modifications d’appartenance à un rôle, des attributs de rôle et
de la propriété des bases est incomplet. Une requête peut ainsi continuer à
utiliser des règles de row level security mises en cache alors que ces
changements imposent désormais d’autres règles, via la réutilisation du plan. Les
politiques obsolètes restent en vigueur jusqu’à ce qu’un autre évènement
invalide le cache ou que la session se termine. L’utilisateur peut alors
réaliser des lectures et modifications encore récemment autorisées, mais
désormais interdites. L’attaquant doit adapter son attaque au schéma de
retrait de droits et aux politiques de sécurité propres aux rôles de
l’application visée. Les versions antérieures à PostgreSQL 18.5, 17.11, 16.15,
15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14668-une-confusion-de-type-ctid-dans-lestimation-de-sélectivité-divulgue-une-dérivée-de-lecture-arbitraire&quot;&gt;CVE-2026-14668: Une confusion de type ctid dans l’estimation de sélectivité divulgue une dérivée de lecture arbitraire&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.1&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
À cause d’un mélange de type dans l’entrée de l’estimation de sélectivité du type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ctid&lt;/code&gt;
de PostgreSQL, le créateur d’un objet peut consulter un calcul dérivé de la
valeur d’une portion arbitraire de 4 octets de la mémoire, via une entrée
choisie qui n’est pas de type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ctid&lt;/code&gt;. Bien que le calcul perde en précision, la
récupération d’une part substantielle des valeurs en mémoire semble possible. Les
versions antérieures à PostgreSQL 18.5, 17.11, 16.15, 15.19 et 14.24 sont
concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14669-un-dépassement-de-heap-buffer-dans-to_char-permet-lexécution-de-code-arbitraire&quot;&gt;CVE-2026-14669: Un dépassement de heap buffer dans to_char permet l’exécution de code arbitraire&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Un dépassement de heap buffer dans &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;to_char(timestamptz)&lt;/code&gt; permet à la partie
qui choisit le fuseau horaire d’exécuter du code arbitraire en tant
qu’utilisateur du système d’exploitation exécutant la base de données,
en utilisant une
abréviation de fuseau horaire POSIX long. Les versions antérieures
à PostgreSQL 18.5, 17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14670-un-dépassement-de-heap-buffer-sur-les-objets-liés-en-plperl-permet-lexécution-de-code-arbitraire&quot;&gt;CVE-2026-14670: Un dépassement de heap buffer sur les objets liés en plperl permet l’exécution de code arbitraire&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Un dépassement de heap buffer au retour d’une table de hachage liée
(&lt;em&gt;tied hash&lt;/em&gt;) en plperl, le propriétaire d’une fonction spécialement conçue
peut exécuter du code arbitraire en tant qu’utilisateur du système d’exploitation exécutant la base de données. Les versions antérieures à
PostgreSQL 18.5, 17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14671-une-confusion-de-type-dans-le-cache-de-plans-du-module-refint-permet-lexécution-de-code-arbitraire&quot;&gt;CVE-2026-14671: Une confusion de type dans le cache de plans du module refint permet l’exécution de code arbitraire&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Un mélange de types dans le module &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;refint&lt;/code&gt; de PostgreSQL permet au créateur
d’un objet d’exécuter du code arbitraire en tant qu’utilisateur du système
d’exploitation exécutant la base de données. Le correctif a débuté comme un rapport
de bug non identifié comme problème de sécurité, et apparaît dans le dépôt git
sous le sujet « refint: Remove plan cache. », sans numéro de CVE. Les versions
antérieures à PostgreSQL 18.5, 17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14672-une-différence-de-réponse-observable-avec-un-scram_iterations-différent-du-défaut-permet-de-deviner-lexistence-dun-utilisateur&quot;&gt;CVE-2026-14672: Une différence de réponse observable avec un scram_iterations différent du défaut permet de deviner l’existence d’un utilisateur&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 5.3&lt;br /&gt;
Versions vulnérables : 16 - 18.&lt;br /&gt;
Une différence de réponse observable dans l’authentification SCRAM de PostgreSQL
permet à un utilisateur non authentifié de tester l’existence d’un utilisateur en
observant le nombre d’itérations SCRAM. Cela suppose que l’utilisateur sondé ait
un &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scram_iterations&lt;/code&gt; différent de la valeur par défaut, car la comparaison
d’authentification pour un utilisateur inexistant renvoie la valeur par défaut.
Parmi les versions majeures 16, 17 et 18, les versions mineures antérieures à
PostgreSQL 18.5, 17.11 et 16.15 sont concernées. Les versions antérieures à
PostgreSQL 16 ne sont pas concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14673-le-module-amcheck-de-postgresql-ne-réinitialise-pas-un-search_path-non-fiable&quot;&gt;CVE-2026-14673: Le module amcheck de PostgreSQL ne réinitialise pas un search_path non fiable&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 3.8&lt;br /&gt;
Versions vulnérables : 14, 15, 16 et 18.&lt;br /&gt;
Un &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;search_path&lt;/code&gt; non fiable dans le module &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;amcheck&lt;/code&gt; permet à un utilisateur
disposant du droit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EXECUTE&lt;/code&gt; sur les fonctions d’&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;amcheck&lt;/code&gt; d’exécuter des
fonctions arbitraires avec les droits des propriétaires des index d’expression
qui dépendent du &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;search_path&lt;/code&gt;. Un attaquant peut exploiter cette faille en
positionnant un &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;search_path&lt;/code&gt; malveillant avant d’appeler la fonction d’&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;amcheck&lt;/code&gt;.
Les versions antérieures à PostgreSQL 18.5, 16.15, 15.19 et 14.24 sont
concernées. PostgreSQL 17 n’est pas concerné.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14676-un-dépassement-de-heap-buffer-dans-pg_stat_statements-permet-lexécution-de-code-arbitraire&quot;&gt;CVE-2026-14676: Un dépassement de heap buffer dans pg_stat_statements permet l’exécution de code arbitraire&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 18.&lt;br /&gt;
Un dépassement de heap buffer dans &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_stat_statements&lt;/code&gt; permet à l’auteur
d’une requête d’exécuter du code arbitraire en tant qu’utilisateur du système
d’exploitation exécutant la base de données, via des requêtes spécialement
conçues contenant des constantes de type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;array&lt;/code&gt;. Les versions antérieures à 
PostgreSQL 18.5 sont concernées. Les versions majeures antérieures à PostgreSQL 18 
ne sont pas concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14677-pltcl-et-plperl-en-32-bits-sous-dimensionnent-des-allocations-à-cause-dun-débordement-dentier&quot;&gt;CVE-2026-14677: pltcl et plperl en 32 bits sous-dimensionnent des allocations à cause d’un débordement d’entier&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Un débordement d’entier dans les versions compilées en 32 bits de pltcl et plperl permet
au créateur d’un objet de forcer le serveur à sous-dimensionner une allocation
et à écrire hors limites, via des fonctions spécialement conçues. Cela
peut conduire à l’exécution de code arbitraire en tant qu’utilisateur du système
d’exploitation exécutant la base de données. La CVE-2026-6473 avait corrigé des
problèmes similaires. Les versions antérieures à PostgreSQL 18.5, 17.11, 16.15,
15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14678-la-fonction-picksplit-de-pg_trgm-lit-au-delà-de-la-limite-dun-tampon&quot;&gt;CVE-2026-14678: La fonction picksplit de pg_trgm lit au-delà de la limite d’un tampon&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 4.3&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Une lecture hors limites dans la fonction &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;picksplit&lt;/code&gt; des index &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_trgm&lt;/code&gt; lit
au-delà de la fin d’un heap buffer. Cela peut permettre au mainteneur d’une
table de déduire certaines valeurs mémoire, via les imprécisions
que constituent les choix de fractionnement d’index. Les versions antérieures à
PostgreSQL 18.5, 17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14679-un-dépassement-de-stack-buffer-lors-de-la-correspondance-des-arguments-écrit-0x0-et-0x1-dans-la-mémoire-du-serveur&quot;&gt;CVE-2026-14679: Un dépassement de stack buffer lors de la correspondance des arguments écrit 0x0 et 0x1 dans la mémoire du serveur&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.2&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Un dépassement de stack buffer lors de la mise en correspondance des noms
d’arguments permet au créateur d’un objet d’obtenir des effets indéterminés, via
le nombre de paramètres &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OUT&lt;/code&gt;. L’attaque ne peut écrire que les octets 0x0 et
0x1 dans la mémoire du serveur. Les versions antérieures à PostgreSQL 18.5,
17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14680-mélange-de-type-via-les-arguments-de-type--internal-&quot;&gt;CVE-2026-14680: Mélange de type via les arguments de type « internal »&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Un mélange de types dans les arguments de type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;internal&lt;/code&gt; permet à n’importe
quel utilisateur d’exécuter du code arbitraire en tant qu’utilisateur du système
d’exploitation exécutant la base de données, via des appels à des fonctions
utilisant ce type d’argument. Le type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;internal&lt;/code&gt; représente une famille de
structures de données mutuellement incompatibles, et non destinées à
être manipulées depuis SQL. Le système censé empêcher de tels appels de
fonction avait des failles. Les versions antérieures à
PostgreSQL 18.5, 17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-14681-vérification-incorrecte-par-postgresql-du-chiffrement-gssapi-lorsquil-est-couplé-à-ssl&quot;&gt;CVE-2026-14681: Vérification incorrecte par PostgreSQL du chiffrement GSSAPI lorsqu’il est couplé à SSL&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 4.2&lt;br /&gt;
Versions vulnérables : 17 - 18.&lt;br /&gt;
Une vérification incorrecte de l’intégrité des messages dans le support GSSAPI de
PostgreSQL permet à un utilisateur de procéder à une négociation GSSAPI
en dépit des règles du &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_hba.conf&lt;/code&gt;,
en passant d’abord par une connexion TLS directe. Bien que le
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_hba.conf&lt;/code&gt; semble imposer GSSAPI, la connexion peut échanger des données
par TLS uniquement. Si les réglages TLS sont plus permissifs
que les réglages GSS, la connexion peut se poursuivre avec un niveau de
protection moindre. Parmi les versions majeures 17 et 18, les versions mineures
antérieures à PostgreSQL 18.5 et 17.11 sont concernées. Les versions antérieures
à PostgreSQL 17 ne sont pas concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-15741-la-désérialisation-dexpressions-autorise-une-injection-sql-via-un-argument-dextract&quot;&gt;CVE-2026-15741: La désérialisation d’expressions autorise une injection SQL via un argument d’EXTRACT&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Une faille d’injection SQL dans l’analyse (&lt;em&gt;deparse&lt;/em&gt;) dans
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EXTRACT()&lt;/code&gt; permet au propriétaire d’un objet d’exécuter du code SQL arbitraire
en tant que superutilisateur, via une définition d’objet hostile. La faille
touche largement les consommateurs de cette reconstruction d’expressions, dont
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_dump&lt;/code&gt;, la commande &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\sf&lt;/code&gt; de psql et les usages similaires dans des outils
tiers. Les versions antérieures à PostgreSQL 18.5, 17.11, 16.15, 15.19 et 14.24
sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-15742-fuzzystrmatch-écrit-à-des-adresses-arbitraires-à-cause-dun-débordement-dentier&quot;&gt;CVE-2026-15742: fuzzystrmatch écrit à des adresses arbitraires, à cause d’un débordement d’entier&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Un débordement d’entier dans le module &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fuzzystrmatch&lt;/code&gt; permet à un utilisateur
de diriger des écritures vers une très large plage d’adresses, et donc
d’exécuter du code arbitraire en tant qu’utilisateur du système d’exploitation
exécutant la base de données, via des entrées extrêmes fournies aux fonctions
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;levenshtein()&lt;/code&gt; ou &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;levenshtein_less_equal()&lt;/code&gt;. Les versions antérieures à
PostgreSQL 18.5, 17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-16238-un-mélange-de-types-dans-pg_restore_attribute_stats-permet-lexécution-de-code-arbitraire&quot;&gt;CVE-2026-16238: Un mélange de types dans pg_restore_attribute_stats() permet l’exécution de code arbitraire&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 18.&lt;br /&gt;
Un mélange de types dans la fonction &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_restore_attribute_stats()&lt;/code&gt; permet au
créateur d’un objet d’exécuter du code arbitraire en tant qu’utilisateur du
système d’exploitation exécutant la base de données. Il peut profiter d’une
confusion entre valeurs de type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;range&lt;/code&gt; et &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multirange&lt;/code&gt; lors de la restauration
des statistiques d’attribut. Les versions antérieures à PostgreSQL 18.5 sont 
concernées. Les versions majeures antérieures à PostgreSQL 18 ne sont pas concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-16239-une-confusion-de-type-lors-dun-close--declare-de-curseur-permet-lexécution-de-code-arbitraire&quot;&gt;CVE-2026-16239: Une confusion de type lors d’un CLOSE + DECLARE de curseur permet l’exécution de code arbitraire&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Un mélange des types dans le cycle de vie des &lt;em&gt;portal&lt;/em&gt;/curseurs permet
à un utilisateur d’exécuter du code arbitraire en tant qu’utilisateur du système
d’exploitation exécutant la base de données. L’exploitation passe par la 
recréation d’un curseur, ou d’un autre &lt;em&gt;portal&lt;/em&gt;, avec des types différents. Les
versions antérieures à PostgreSQL 18.5, 17.11, 16.15, 15.19 et 14.24 sont
concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-16241-un-dépassement-négatif-dentier-dans-ecpg-peut-faire-planter-le-client&quot;&gt;CVE-2026-16241: Un dépassement négatif d’entier dans ECPG peut faire planter le client&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 3.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Un dépassement négatif d’entier dans ECPG permet à un administrateur du
serveur de base de données d’obtenir un déni de service temporaire du client
ECPG, en envoyant une valeur &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bytea&lt;/code&gt; dépourvue du préfixe obligatoire. Le client
écrase alors une très large zone mémoire avec des octets qui échappent à la
connaissance et au contrôle de l’attaquant. Cela produit généralement un simple 
SIGSEGV, mais dans de rares cas, cela pourrait avoir un impact sur l’intégrité 
du client via cette écriture. Les versions antérieures à PostgreSQL 
18.5, 17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-18024-la-fonction-ascii-lit-au-delà-de-la-limite-dun-tampon&quot;&gt;CVE-2026-18024: La fonction ascii() lit au-delà de la limite d’un tampon&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 4.3&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Une lecture hors limites dans la fonction SQL &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ascii()&lt;/code&gt; permet à un utilisateur
de divulguer jusqu’à 3 octets situés après la fin d’une allocation donnée, via
une valeur texte spécialement conçue. Il s’agit de la même classe de bugs que
celle corrigée par la CVE-2026-2006, mais avec un impact moindre. Les versions
antérieures à PostgreSQL 18.5, 17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-18408-la-commande-unrestrict-de-psql-permet-au-superutilisateur-du-serveur-dorigine-dun-pg_dump-dexécuter-du-code-arbitraire-dans-le-client-psql&quot;&gt;CVE-2026-18408: La commande \unrestrict de psql permet au superutilisateur du serveur d’origine d’un pg_dump d’exécuter du code arbitraire dans le client psql&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
L’inclusion de données non fiables dans &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_dump&lt;/code&gt; permet à un superutilisateur
malveillant du serveur d’origine d’injecter du code arbitraire, exécuté au
moment de la restauration sous le compte système exécutant psql, via l’expansion
des arguments de la méta-commande &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\restrict&lt;/code&gt; de psql. Le correctif de la
CVE-2025-8714 avait introduit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\restrict&lt;/code&gt; et &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\unrestrict&lt;/code&gt; pour bloquer cette
attaque, mais &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\unrestrict&lt;/code&gt; suffisait à lui seul à la mener. Sont concernés
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_dump&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_dumpall&lt;/code&gt; et &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_restore&lt;/code&gt; lorsqu’il est utilisé pour produire une
sauvegarde au format &lt;em&gt;plain&lt;/em&gt;. Un usage tiers de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\restrict&lt;/code&gt; pourrait être affecté, 
mais aucun usage de ce type n’a été identifié. Les versions antérieures à PostgreSQL 
18.5, 17.11, 16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h4 id=&quot;cve-2026-19385-un-dépassement-de-heap-buffer-dans-pg_dump-permet-lexécution-de-code-arbitraire&quot;&gt;CVE-2026-19385: Un dépassement de heap buffer dans pg_dump permet l’exécution de code arbitraire&lt;/h4&gt;
&lt;p&gt;CVSS v3.1 Base Score: 8.8&lt;br /&gt;
Versions vulnérables : 14 - 18.&lt;br /&gt;
Un dépassement de heap buffer dans &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_dump&lt;/code&gt;, lié à une trop longue liste de 
transformations de fonctions, permet à un créateur d’objet d’exécuter du code 
arbitraire en tant qu’utilisateur système exécutant pg_dump, via une liste de 
transformations malveillante. Les versions antérieures à PostgreSQL 18.5, 17.11, 
16.15, 15.19 et 14.24 sont concernées.&lt;/p&gt;

&lt;h3 id=&quot;correctifs-et-améliorations&quot;&gt;Correctifs et améliorations&lt;/h3&gt;

&lt;p&gt;Cette mise à jour corrige plus de 110 bugs reportés au cours des derniers mois.&lt;/p&gt;

&lt;p&gt;Le problème suivant ne concerne que PostgreSQL 14, 15 et 16, mais nous le mettons
en avant ici en raison de sa gravité :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Correction d’un auto-verrouillage (&lt;em&gt;self-deadlock&lt;/em&gt;) pouvant survenir lors du
rejeu de WAL générés par une version mineure antérieure. Cette régression,
introduite dans la précédente série de versions mineures, pouvait bloquer une
instance standby suivant une instance primaire dans une version mineure plus
ancienne.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Les correctifs suivants concernent PostgreSQL 18. Beaucoup d’entre eux
s’appliquent également aux autres versions supportées.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Correction de la construction parallélisée des index &lt;a href=&quot;https://www.postgresql.org/docs/current/gin.html&quot;&gt;GIN&lt;/a&gt;
afin que la valeur &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reltuples&lt;/code&gt; de la table soit correctement mise à jour dans
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_class&lt;/code&gt;. Auparavant, un worker parallèle pouvait remonter un nombre de
lignes non initialisé, laissant &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reltuples&lt;/code&gt; à une valeur aberrante (dont
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Infinity&lt;/code&gt; ou &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NaN&lt;/code&gt;). Une telle valeur peut empêcher l’autovacuum et
l’autoanalyze de traiter la table, et la situation ne se corrige pas d’elle-même.
Si vous avez des tables avec des index GIN, vérifiez que leur &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reltuples&lt;/code&gt; est
cohérent après la mise à jour. Voir la section « Mettre à jour ».&lt;/li&gt;
  &lt;li&gt;Plusieurs correctifs pour les index &lt;a href=&quot;https://www.postgresql.org/docs/current/btree-gist.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;btree_gist&lt;/code&gt;&lt;/a&gt;,
dont la gestion des &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NaN&lt;/code&gt; pour les types &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;float4&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;float8&lt;/code&gt;, qui pouvait donner
des résultats erronés sur les colonnes contenant des &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NaN&lt;/code&gt; et le tri correct
des valeurs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bit&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bit varying&lt;/code&gt; lors de la construction de l’index. Une
réindexation sur les colonnes de type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;float&lt;/code&gt; ou &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bit&lt;/code&gt; peut être nécessaire 
après la mise à jour. Voir la section « Mettre à jour ».&lt;/li&gt;
  &lt;li&gt;Correction d’un débordement d’entier dans les comparaisons &lt;a href=&quot;https://www.postgresql.org/docs/current/ltree.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ltree&lt;/code&gt;&lt;/a&gt;.
Les valeurs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ltree&lt;/code&gt; comportant plus de 14 653 labels environ pouvaient être
comparées incorrectement, avec pour conséquence un index B-tree
corrompu. Une réindexation des index affectés peut être nécessaire après la mise
à jour. Voir la section « Mettre à jour ».&lt;/li&gt;
  &lt;li&gt;Correction du &lt;a href=&quot;https://www.postgresql.org/docs/current/ddl-partitioning.html#DDL-PARTITION-PRUNING&quot;&gt;partition pruning&lt;/a&gt;
pour les tables partitionnées par &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RANGE&lt;/code&gt;, afin que la partition &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DEFAULT&lt;/code&gt; ne
soit plus ignorée alors qu’elle doit être parcourue. Auparavant, des lignes
pouvaient manquer dans les résultats de requête.&lt;/li&gt;
  &lt;li&gt;Plusieurs correctifs pour les tables partitionnées avec
des tables distantes (&lt;em&gt;foreign-table&lt;/em&gt;) comme partition :
lorsque l’élagage des partitions à l’exécution
déterminait que certaines partitions n’avaient pas à être parcourues, les
requêtes en cours vers les serveurs distants n’étaient pas toujours gérées
correctement, provoquant des échecs.&lt;/li&gt;
  &lt;li&gt;Plusieurs correctifs sur &lt;a href=&quot;https://www.postgresql.org/docs/current/dml-returning.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RETURNING&lt;/code&gt;&lt;/a&gt;
avec &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OLD&lt;/code&gt; et &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NEW&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Amélioration des performances des &lt;em&gt;hash join&lt;/em&gt; lorsqu’il y a
plusieurs clés de jointure et de nombreuses valeurs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NULL&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Plusieurs correctifs du planificateur qui pouvaient produire des résultats
erronés, notamment pour les tests &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;valeur IN (tableau)&lt;/code&gt; où le tableau peut être
vide, et pour les fonctions de fenêtrage &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;COUNT()&lt;/code&gt; avec une clause
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EXCLUDE&lt;/code&gt; ou dépourvues d’&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ORDER BY&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Ajout des vérifications manquantes sur la « hachabilité » des comparaisons
d’égalité pour les types conteneurs (&lt;a href=&quot;https://www.postgresql.org/docs/current/arrays.html&quot;&gt;array&lt;/a&gt;,
&lt;a href=&quot;https://www.postgresql.org/docs/current/rowtypes.html&quot;&gt;composite types&lt;/a&gt; et
&lt;a href=&quot;https://www.postgresql.org/docs/current/rangetypes.html&quot;&gt;ranges&lt;/a&gt;). Sans ces
vérifications, le planificateur pouvait choisir un plan basé sur le hachage qui
échouait ensuite à l’exécution avec l’erreur « could not identify a hash function ».&lt;/li&gt;
  &lt;li&gt;Correction de l’attachement de partitions d’index qui sont des
&lt;a href=&quot;https://www.postgresql.org/docs/current/ddl-constraints.html#DDL-CONSTRAINTS-EXCLUSION&quot;&gt;contraintes d’exclusion&lt;/a&gt;,
ce qui corrige aussi la sauvegarde et la restauration des contraintes
d’exclusion partitionnées.&lt;/li&gt;
  &lt;li&gt;Correction de &lt;a href=&quot;https://www.postgresql.org/docs/current/sql-reindex.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;REINDEX CONCURRENTLY&lt;/code&gt;&lt;/a&gt;
sur un index supportant une contrainte d’unicité différée, qui pouvait
provoquer de fausses violations de contrainte.&lt;/li&gt;
  &lt;li&gt;Rétablissement d’une optimisation de parcours d’index qui convertit un motif
&lt;a href=&quot;https://www.postgresql.org/docs/current/functions-matching.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LIKE&lt;/code&gt;&lt;/a&gt; ou une
expression rationnelle à correspondance exacte en une condition d’égalité sur
l’index, lorsque les collations de l’index et de l’expression diffèrent.&lt;/li&gt;
  &lt;li&gt;Plusieurs correctifs sur &lt;a href=&quot;https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-SQLJSON-PATH&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jsonpath&lt;/code&gt;&lt;/a&gt; :
les opérateurs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@?&lt;/code&gt; et &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@@&lt;/code&gt; lèvent désormais correctement une erreur pour une
variable non définie dans l’expression du chemin. Auparavant, ces opérateurs ne
pouvant pas fournir de valeur de variable, une variable non définie était
traitée comme un &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;null&lt;/code&gt; JSON au lieu de produire une erreur, ce qui pouvait
aussi entraîner une consommation mémoire non bornée.&lt;/li&gt;
  &lt;li&gt;Garantie du blocage de l’accès aux tables temporaires des autres sessions, qui pouvait
conduire à des résultats silencieusement incorrects.&lt;/li&gt;
  &lt;li&gt;Correction des erreurs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;no empty local buffer available&quot;&lt;/code&gt; lors de l’accès à
des tables temporaires, un &lt;a href=&quot;https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-EFFECTIVE-IO-CONCURRENCY&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;effective_io_concurrency&lt;/code&gt;&lt;/a&gt;
élevé pouvant permettre à un seul flux de lecture de consommer tous les buffers
locaux.&lt;/li&gt;
  &lt;li&gt;L’&lt;a href=&quot;https://www.postgresql.org/docs/current/routine-vacuuming.html#AUTOVACUUM&quot;&gt;autovacuum&lt;/a&gt;
ne traite plus les bases dans le mauvais ordre, à savoir la plus faible
priorité d’abord au lieu de la plus forte.&lt;/li&gt;
  &lt;li&gt;Rétablissement du mode &lt;em&gt;failsafe&lt;/em&gt; de &lt;a href=&quot;https://www.postgresql.org/docs/current/sql-vacuum.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;VACUUM&lt;/code&gt;&lt;/a&gt;
contre le wraparound, afin qu’il utilise l’intégralité du pool de &lt;em&gt;shared
buffers&lt;/em&gt; comme prévu, ce qui ralentissait les vacuums d’urgence.&lt;/li&gt;
  &lt;li&gt;Correction d’un décodage possiblement incorrect des entrées d’index lors des
&lt;a href=&quot;https://www.postgresql.org/docs/current/indexes-index-only-scans.html&quot;&gt;index-only scans&lt;/a&gt;
GiST et SP-GiST, qui pouvait renvoyer des données corrompues.&lt;/li&gt;
  &lt;li&gt;Correction d’une &lt;em&gt;race condition&lt;/em&gt; dans la détection de conflits en niveau
d’isolation &lt;a href=&quot;https://www.postgresql.org/docs/current/transaction-iso.html#XACT-SERIALIZABLE&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SERIALIZABLE&lt;/code&gt;&lt;/a&gt;.
Un conflit pouvait être manqué lors de l’examen d’un index B-tree initialement
vide, laissant des transactions en conflit être validées, rompant au passage la 
sérialisabilité.&lt;/li&gt;
  &lt;li&gt;Correction de la journalisation dans les WAL des opérations qui effacent des
bits dans les &lt;a href=&quot;https://www.postgresql.org/docs/current/storage-vm.html&quot;&gt;visibility maps&lt;/a&gt;
des tables. Cela pouvait produire des sauvegardes incrémentales incorrectes ou
laisser des écritures de pages partielles non corrigées.&lt;/li&gt;
  &lt;li&gt;Correction du &lt;a href=&quot;https://www.postgresql.org/docs/current/logicaldecoding.html&quot;&gt;décodage logique&lt;/a&gt;
des transactions préparées vides. Une transaction préparée sans changement
décodable pouvait envoyer un &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;COMMIT PREPARED&lt;/code&gt; ou un &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ROLLBACK PREPARED&lt;/code&gt; au
plugin de sortie sans &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PREPARE&lt;/code&gt; préalable, ce qui casse la réplication pour
l’abonné natif.&lt;/li&gt;
  &lt;li&gt;Plusieurs correctifs sur &lt;a href=&quot;https://www.postgresql.org/docs/current/libpq.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libpq&lt;/code&gt;&lt;/a&gt;,
dont la garantie que tous les octets en attente dans le tampon de déchiffrement
SSL ou GSS sont bien consommés lors de la lecture des données, évitant qu’un
client n’attende des données déjà arrivées.&lt;/li&gt;
  &lt;li&gt;Correction de &lt;a href=&quot;https://www.postgresql.org/docs/current/app-pgcreatesubscriber.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_createsubscriber&lt;/code&gt;&lt;/a&gt;
pour qu’il nettoie les objets laissés sur le publieur après un échec, y compris un
slot de réplication.&lt;/li&gt;
  &lt;li&gt;Correction de &lt;a href=&quot;https://www.postgresql.org/docs/current/app-pgrestore.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_restore&lt;/code&gt;&lt;/a&gt;
avec &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--statistics&lt;/code&gt; ou &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--statistics-only&lt;/code&gt; pour que, combiné à d’autres options
de restauration sélective comme &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--schema&lt;/code&gt;, il restaure bien les objets
attendus, conformément au comportement de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_dump&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cette mise à jour intègre également les données de fuseaux horaires tzdata
2026c : l’Alberta (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;America/Edmonton&lt;/code&gt;) passera à UTC-06 toute l’année (soit un
horaire d’été permanent) à partir de novembre 2026, avec l’hypothèse que
l’abréviation de fuseau sera CST à partir de cette date
(cela pourrait changer). Le Maroc
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Africa/Casablanca&lt;/code&gt;) passera quant à lui à UTC+00 permanent, sans changement
d’heure, le 20 septembre 2026.&lt;/p&gt;

&lt;h3 id=&quot;mettre-à-jour&quot;&gt;Mettre à jour&lt;/h3&gt;

&lt;p&gt;Toutes les mises à jour de PostgreSQL sont cumulatives.
Pour appliquer la mise à jour, comme pour les autres versions mineures,
les utilisateurs n’ont pas besoin de sauvegarder
et recharger leur base de données, ni d’utiliser &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_upgrade&lt;/code&gt;.
Vous pouvez simplement arrêter PostgreSQL et mettre à jour ses binaires.&lt;/p&gt;

&lt;p&gt;Si vous avez des tables comportant des index GIN, nous vous recommandons de
vérifier leur valeur &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reltuples&lt;/code&gt; après la mise à jour. Un bug dans la
construction parallélisée des index GIN a pu laisser &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reltuples&lt;/code&gt; à une valeur
aberrante (dont &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Infinity&lt;/code&gt; ou &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NaN&lt;/code&gt;) qui empêche définitivement l’autovacuum et
l’autoanalyze de traiter la table. La requête suivante liste les tables
possédant un index GIN, avec leur &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reltuples&lt;/code&gt; courant :&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DISTINCT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;oid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regclass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reltuples&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pg_class&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;JOIN&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pg_index&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;oid&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;indrelid&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;JOIN&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pg_class&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ic&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;indexrelid&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ic&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;oid&lt;/span&gt;
 &lt;span class=&quot;k&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;relhasindex&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ic&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;relam&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2742&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Pour toute table dont la valeur &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reltuples&lt;/code&gt; semble incorrecte, exécutez un
&lt;a href=&quot;https://www.postgresql.org/docs/current/sql-analyze.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ANALYZE&lt;/code&gt;&lt;/a&gt; dessus (ou
créez un autre index) pour réinitialiser la valeur.&lt;/p&gt;

&lt;p&gt;Si vous utilisez &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;btree_gist&lt;/code&gt;, vous devez réindexer les index &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;btree_gist&lt;/code&gt; sur
les colonnes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;float4&lt;/code&gt; ou &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;float8&lt;/code&gt; susceptibles de contenir des valeurs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NaN&lt;/code&gt;,
ainsi que les index &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;btree_gist&lt;/code&gt; sur des colonnes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bit&lt;/code&gt; ou &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bit varying&lt;/code&gt;, par
exemple :&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;REINDEX&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;INDEX&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;nom_de_votre_index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Si vous utilisez &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ltree&lt;/code&gt; et que vous avez des index btree sur des valeurs
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ltree&lt;/code&gt; comportant un très grand nombre de labels (plus de 14 653 environ), vous
devez &lt;a href=&quot;https://www.postgresql.org/docs/current/sql-reindex.html&quot;&gt;réindexer&lt;/a&gt; ces
index, car ils peuvent être corrompus, par exemple :&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;REINDEX&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;INDEX&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;nom_de_votre_index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Les utilisateurs ayant sauté une version mineure ou plus peuvent avoir besoin de
réaliser d’autres opérations post-mise à jour. Voir les &lt;a href=&quot;https://www.postgresql.org/docs/release/&quot;&gt;Notes de version&lt;/a&gt; pour
les détails.&lt;/p&gt;

&lt;h3 id=&quot;à-propos-de-la-bêta-de-postgresql-19&quot;&gt;À propos de la bêta de PostgreSQL 19&lt;/h3&gt;

&lt;p&gt;Cette version marque la troisième beta de PostgreSQL 19. Dans l’esprit de la
communauté open source PostgreSQL, nous vous encourageons vivement à tester les
nouvelles fonctionnalités de PostgreSQL 19 sur vos systèmes pour aider à
éliminer bugs et autres problèmes. Nous ne conseillons pas d’exécuter PostgreSQL
19 Beta 3 en production, mais plutôt de trouver des moyens de faire tourner vos
charges applicatives habituelles sur cette version bêta. Pour en savoir plus,
voir le &lt;a href=&quot;https://www.postgresql.org/developer/beta/&quot;&gt;processus de test des versions beta&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Parmi les changements depuis la bêta 2 :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Retrait de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GROUP BY ALL&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Plusieurs correctifs sur la nouvelle syntaxe &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FOR PORTION OF&lt;/code&gt; des tables temporelles.&lt;/li&gt;
  &lt;li&gt;Plusieurs correctifs sur la nouvelle fonctionnalité de synchronisation des
séquences en réplication logique, dont une &lt;em&gt;race condition&lt;/em&gt; impliquant
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;REFRESH SEQUENCES&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Correction d’une erreur « unexpected logical decoding status change » pouvant
survenir lorsque le décodage logique est activé de manière concurrente.&lt;/li&gt;
  &lt;li&gt;Correction de problèmes liés aux changements de propriétaire des abonnements.&lt;/li&gt;
  &lt;li&gt;Correction de résultats de requête erronés avec &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postgres_fdw&lt;/code&gt;, lors d’un
&lt;em&gt;push down&lt;/em&gt; d’une comparaison de tableau comme &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;champ = ANY($1)&lt;/code&gt; impliquant une
conversion de type implicite.&lt;/li&gt;
  &lt;li&gt;Correction d’un plantage lors des vérifications de clé étrangère impliquant
une contrainte &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UNIQUE&lt;/code&gt; acceptant les valeurs nulles.&lt;/li&gt;
  &lt;li&gt;Correction du &lt;em&gt;parsing&lt;/em&gt; par &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pg_plan_advice&lt;/code&gt; des tirets bas (&lt;em&gt;underscore&lt;/em&gt;) dans les
littéraux numériques.&lt;/li&gt;
  &lt;li&gt;Correction d’une clause &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FORMAT&lt;/code&gt; manquante lors de la reconstruction textuelle
de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JSON_ARRAY(query)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour la liste complète des nouvelles fonctionnalités et des changements, voir
les notes de version] :&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.postgresql.org/docs/19/release-19.html&quot;&gt;https://www.postgresql.org/docs/19/release-19.html&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;tests-des-bugs-et-de-la-compatibilité&quot;&gt;Tests des bugs et de la compatibilité&lt;/h3&gt;

&lt;p&gt;La stabilité de chaque version de PostgreSQL dépend grandement de vous, la
communauté, pour tester la version à venir avec vos charges applicatives et vos
outils de test, afin de trouver les bugs et les régressions avant la
disponibilité publique de PostgreSQL 19. S’agissant d’une bêta, des changements
mineurs de comportement de la base de données, de détails de fonctionnalités et
d’API restent possibles. Vos retours et vos tests aideront à déterminer les
derniers ajustements des nouvelles fonctionnalités, alors n’hésitez pas à tester
rapidement. La qualité des tests réalisés par les utilisateurs détermine
quand la version finale pourra être publiée.&lt;/p&gt;

&lt;p&gt;Une liste des &lt;a href=&quot;https://wiki.postgresql.org/wiki/PostgreSQL_19_Open_Items&quot;&gt;sujets en cours&lt;/a&gt;
est disponible publiquement sur le wiki PostgreSQL. Vous pouvez
&lt;a href=&quot;https://www.postgresql.org/account/submitbug/&quot;&gt;signaler des bugs&lt;/a&gt; via ce
formulaire sur le site de PostgreSQL :&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.postgresql.org/account/submitbug/&quot;&gt;https://www.postgresql.org/account/submitbug/&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;liens&quot;&gt;Liens&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/download/&quot;&gt;Téléchargements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/docs/release/&quot;&gt;Notes de version&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/support/security/&quot;&gt;Sécurité&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/support/versioning/&quot;&gt;Politique de versionnement&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/account/submitbug/&quot;&gt;Soumettez un bug&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/about/donate/&quot;&gt;Donnez&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si vous avez des corrections ou des suggestions concernant cette annonce de
version, merci de les envoyer à la liste de diffusion publique
&lt;em&gt;pgsql-www@lists.postgresql.org&lt;/em&gt; (&lt;a href=&quot;https://www.postgresql.org/list/&quot;&gt;mailing list&lt;/a&gt;).&lt;/p&gt;
</description>
				<pubDate>Thu, 13 Aug 2026 00:00:00 -0500</pubDate>
				<link>https://blog.dalibo.com/2026/08/13/postgresql_release_18.6.html</link>
				<guid isPermaLink="true">https://blog.dalibo.com/2026/08/13/postgresql_release_18.6.html</guid>
			</item>
		
			<item>
				<title>Dalibo recrute : Développeur/Développeuse backend</title>
				<description>&lt;p&gt;&lt;em&gt;Paris, le 30 juillet 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Dalibo est à la recherche d’un &lt;strong&gt;Développeur ou Développeuse backend Python/Go/Rust&lt;/strong&gt; en full remote.&lt;/p&gt;

&lt;!--MORE--&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/img/dalibo_recrute4.png&quot; alt=&quot;visuel recrutement&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;le-poste&quot;&gt;Le poste&lt;/h3&gt;

&lt;p&gt;Au sein de l’agence Projets et développement, vous intégrerez l’équipe de développement logiciel en charge d’assurer les évolutions et la maintenance de nos outils d’industrialisation et de gestion de parc d’instances PostgreSQL.&lt;/p&gt;

&lt;p&gt;Dans le cadre de ce poste, vous collaborez au quotidien avec :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;des DBAs industrialisation et un chef de projet chargé de l’intégration des solutions chez nos clients ;&lt;/li&gt;
  &lt;li&gt;des Product Owners chargés de spécifier et recetter les User Stories, ainsi que de prioriser les objectifs et d’établir la feuille de route des solutions ;&lt;/li&gt;
  &lt;li&gt;des développeurs Python, Golang, Rust et frontend ;&lt;/li&gt;
  &lt;li&gt;le directeur technique.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bien que le poste soit full remote, au moins un déplacement trimestriel à Paris est à prévoir, pour une durée d’une semaine.&lt;/p&gt;

&lt;h3 id=&quot;les-compétences-requises&quot;&gt;Les compétences requises&lt;/h3&gt;

&lt;p&gt;Ce poste requiert la connaissance et l’expérience des domaines suivants :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;GNU/Linux (Debian et base Redhat)&lt;/li&gt;
  &lt;li&gt;Packaging (Debian et base Redhat)&lt;/li&gt;
  &lt;li&gt;Niveau avancé dans deux des languages de programmation suivants : Python, Golang, Rust&lt;/li&gt;
  &lt;li&gt;Git : versionnement, collaboration sur des projets avec GitLab ou GitHub, et utilisation des pipelines CI pour l’intégration continue&lt;/li&gt;
  &lt;li&gt;Anglais écrit&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;les-compétences-souhaitées&quot;&gt;Les compétences souhaitées&lt;/h4&gt;

&lt;p&gt;Connaître les domaines et outils suivants :&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;environnement et opérateurs Kubernetes, en particulier CloudNativePG&lt;/li&gt;
  &lt;li&gt;pglift&lt;/li&gt;
  &lt;li&gt;PostgreSQL et son écosystème&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Une expérience dans le chiffrement, l’anonymisation et l’architecture logicielle serait également un “plus”.&lt;/p&gt;

&lt;h3 id=&quot;les-avantages&quot;&gt;Les avantages&lt;/h3&gt;

&lt;p&gt;Télétravail, possibilité de devenir sociétaire, grille salariale transparente, participation aux bénéfices, contributions aux communautés PostgreSQL et SCOP…&lt;/p&gt;

&lt;p&gt;Nous offrons un environnement favorable à la montée en compétences et à leur partage, à l’implication et l’émancipation des personnes salariées, ainsi qu’au respect de la vie privée et familiale.&lt;/p&gt;

&lt;p&gt;Les détails sont &lt;strong&gt;&lt;a href=&quot;https://www.dalibo.com/jobs&quot;&gt;ici&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;postuler&quot;&gt;Postuler&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;via &lt;a href=&quot;https://www.welcometothejungle.com/fr/companies/dalibo/jobs/developpeur-backend-open-source-full-remote_paris&quot;&gt;WelcomeToTheJungle&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;ou écrire à &lt;a href=&quot;mailto:recrutement@dalibo.com&quot;&gt;recrutement@dalibo.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h4 id=&quot;à-propos-de-dalibo&quot;&gt;À propos de Dalibo&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;https://www.dalibo.com&quot;&gt;DALIBO&lt;/a&gt; est le spécialiste français de PostgreSQL. Actuellement forte de 42 salarié⋅es, dont une majorité d’administrateurs de bases de données (DBA), la société propose un cursus de formation complet aux DBA, ainsi qu’une offre de support spécialement conçue pour s’adapter aux besoins des entreprises en matière de sécurité, performance et pérennité.&lt;/p&gt;

&lt;h4 id=&quot;libriste-et-scop&quot;&gt;Libriste et SCOP&lt;/h4&gt;

&lt;p&gt;Depuis ses débuts, notre PME est engagée auprès de la communauté PostgreSQL, non seulement à travers le développement logiciel, mais aussi en participant à des événements, en donnant des conférences libres d’accès, en sponsorisant des projets, etc.&lt;/p&gt;

&lt;p&gt;Dalibo est avant tout un collectif passionné qui a inscrit, en 2011, les principes du &lt;a href=&quot;https://fr.wikipedia.org/wiki/Logiciel_libre&quot;&gt;Libre&lt;/a&gt; dans ses statuts &lt;a href=&quot;https://www.les-scop.coop/les-scop&quot;&gt;coopératifs&lt;/a&gt;.&lt;/p&gt;

</description>
				<pubDate>Thu, 30 Jul 2026 00:00:00 -0500</pubDate>
				<link>https://blog.dalibo.com/2026/07/30/dev_backend.html</link>
				<guid isPermaLink="true">https://blog.dalibo.com/2026/07/30/dev_backend.html</guid>
			</item>
		
	</channel>
</rss>
