<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
  <title>Data Bene - Tag: 'Sauvegarde'</title>
  <subtitle>Base de données relationnelles, open-source et adaptives.</subtitle>
  <link href="https://www.data-bene.io/fr/blog/tags/sauvegarde.xml" rel="self" type="application/atom+xml" />
  <updated>2025-04-01T00:00:00Z</updated>
  <id>https://www.data-bene.io/fr/blog/tags/sauvegarde.xml</id>
    <entry>
      <title>Il était une fois une base confinée - PostgreSQL, QR Codes et l'art de la sauvegarde sans réseau</title>
      <link href="https://www.data-bene.io/fr/blog/sauvegarde-sans-reseau/" />
      <updated>2025-04-01T00:00:00Z</updated>
      <id>https://www.data-bene.io/fr/blog/sauvegarde-sans-reseau/</id>
     <content type="html"><![CDATA[ <h2 id="📦-le-fort-knox-des-bases-de-donnees"><a class="heading-anchor" href="#📦-le-fort-knox-des-bases-de-donnees">📦 Le Fort Knox des bases de données</a></h2>
<p>Il était une fois, dans une salle serveur lointaine, entourée de verre blindé et de béton armé, une base PostgreSQL tellement confinée, tellement isolée, qu’elle ne pouvait que rêver du cloud.</p>
<p>Pas de réseau.</p>
<p>Pas d’USB.</p>
<p>Aucun stockage externe accessible en écriture.</p>
<p>Juste un clavier, un écran, et le bourdonnement des filtres à air de qualité industrielle.</p>
<p>Ce n’était pas un simple environnement “air-gapped”. C’était une zone d’exfiltration zéro, avec une sécurité opérationnelle si rigoureuse qu’on aurait cru qu’elle protégeait des secrets d’État — ou pire, un système bancaire des années 80.</p>
<p>Et pourtant, dans cet oubli numérique, une question demeurait :<br>
<strong>Comment sauvegarder une base PostgreSQL sans jamais extraire un seul fichier ?</strong></p>
<hr>
<h2 id="🎥-quand-lecran-devient-ton-reseau"><a class="heading-anchor" href="#🎥-quand-lecran-devient-ton-reseau">🎥 Quand l’écran devient ton réseau</a></h2>
<p>Notre client ne voulait pas juste une sauvegarde. Il <em>en avait besoin</em>. La crainte n’était pas le vol, mais <strong>la perte totale</strong> : une carte mère qui meurt en silence, enfermant les données à jamais dans sa cage de verre. Et dans ce cas, casser le mur à la masse n’est pas un plan de reprise d’activité très élégant.</p>
<p>Nous avons envisagé toutes les options :</p>
<ul class="list">
<li>OCR d’un défilement de dump SQL ? Trop imprécis.</li>
<li>Filmer la sortie <code>psql</code> ? Beaucoup trop verbeux.</li>
<li>Imprimer l’hexadécimal ? On a quand même une conscience.</li>
</ul>
<p>Et puis, l’illumination : <strong>les QR codes</strong>.</p>
<p>Et si on faisait un <code>pg_dump</code> de la base…</p>
<p>…en QR codes…</p>
<p>…affichés à l’écran…</p>
<p>…filmés par une caméra haute fréquence…</p>
<p>…puis reconstitués image par image à l’extérieur ?</p>
<p>C’était absurde. Donc forcément prometteur.</p>
<hr>
<h2 id="🧠-hacking-pg_dump-la-version-pixelisee"><a class="heading-anchor" href="#🧠-hacking-pg_dump-la-version-pixelisee">🧠 Hacking <code>pg_dump</code> : la version pixelisée</a></h2>
<p>L’outil adoré <code>pg_dump</code> de PostgreSQL est modulaire. On l’a donc enrichi d’un nouvel “archiver” : <code>--format=qrcode</code>.</p>
<p>Voici le fonctionnement :</p>
<ol class="list">
<li><strong>Encodage QR</strong> : chaque portion de sortie SQL est convertie en QR code (format PNG).</li>
<li><strong>Streaming</strong> : au lieu de sauvegarder les images, on les envoie directement sur <code>stdout</code>.</li>
<li><strong>Mise en page</strong> : notre interface affiche plusieurs QR codes à l’écran en haute résolution (on parle de 2000+ pixels — de quoi afficher une grille bien dense).</li>
<li><strong>Capture vidéo</strong> : une machine dédiée avec une caméra 1280Hz filme l’écran et enregistre la séquence complète.</li>
</ol>
<p>Pas de macros. Pas de tricherie. Juste des photons et des images.</p>
<hr>
<h2 id="🔍-reconstruction-a-la-sortie-de-la-cage"><a class="heading-anchor" href="#🔍-reconstruction-a-la-sortie-de-la-cage">🔍 Reconstruction à la sortie de la cage</a></h2>
<p>Une fois la vidéo extraite du cube de verre :</p>
<ul class="list">
<li>Notre parseur lit la vidéo image par image.</li>
<li>Les QR codes sont détectés et décodés en parallèle.</li>
<li>Chaque bloc est identifié par son numéro de séquence.</li>
<li>Le tout est réassemblé en un fichier <code>pg_dump.sql</code> complet.</li>
</ul>
<p>Et voilà : la base renaît — <strong>entièrement exportée sans transfert numérique</strong>.<br>
Rien que de la lumière et des lentilles.</p>
<hr>
<h2 id="🧩-performances-et-fidelite"><a class="heading-anchor" href="#🧩-performances-et-fidelite">🧩 Performances et fidélité</a></h2>
<ul class="list">
<li><strong>QR Version</strong> : Version 40, mode binaire optimisé pour la densité maximale.</li>
<li><strong>Correction d’erreur</strong> : Niveau Q pour une robustesse accrue.</li>
<li><strong>Affichage</strong> : Grille 25×16 QR codes sur un écran 1920×1080 — soit 350 blocs par image (environ 1 Mo par frame).</li>
<li><strong>Vitesse de lecture</strong> : ~60 images/seconde → 21 000 blocs/seconde ≈ 60 Mo/s !</li>
<li><strong>Durée totale</strong> : Une sauvegarde logique complète de moins de 6 Go exportée en moins de 100 minutes !</li>
</ul>
<hr>
<h2 id="🛡️-pourquoi-cest-important"><a class="heading-anchor" href="#🛡️-pourquoi-cest-important">🛡️ Pourquoi c’est important</a></h2>
<p>Ce n’est pas juste une anecdote technique — c’est une preuve que <strong>la souplesse de PostgreSQL s’étend jusqu’à l’absurde</strong>. Les environnements ultra-sécurisés ne sont pas rares : défense, finance, infrastructures critiques… Et quand les outils classiques ne suffisent plus, l’architecture extensible de PostgreSQL permet d’innover, même en milieu extrême.</p>
<p>Chez <strong>Data Bene</strong>, on vit pour ce genre de défi. Optimiser les plans d’exécution ou imaginer des méthodes d’exfiltration qui ressemblent à de l’espionnage, c’est notre terrain de jeu.</p>
<hr>
<p><em>Envie d’essayer ? Écrivez-nous — on adore les sauvegardes bizarres.</em></p>
<p><em>Et si jamais vous pensez à utiliser <code>pg_restore</code> en spectacle laser, appelez-nous. On est curieux.</em></p>
 ]]></content>
			<author>
				<name>Cédric Villemain</name>
			</author>
    </entry>
</feed>
