<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Emilien Mamalet</title>
    <description>The latest articles on Forem by Emilien Mamalet (@emilien_m).</description>
    <link>https://forem.com/emilien_m</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1572669%2F5f455150-df6f-4417-84b9-7c40d08767d2.jpg</url>
      <title>Forem: Emilien Mamalet</title>
      <link>https://forem.com/emilien_m</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/emilien_m"/>
    <language>en</language>
    <item>
      <title>Ne jouez plus tout l'historique de vos migrations Flyway grâce au baseline !</title>
      <dc:creator>Emilien Mamalet</dc:creator>
      <pubDate>Thu, 09 Jan 2025 07:48:41 +0000</pubDate>
      <link>https://forem.com/onepoint/ne-jouez-plus-tout-lhistorique-de-vos-migrations-flyway-grace-au-baseline--4j4</link>
      <guid>https://forem.com/onepoint/ne-jouez-plus-tout-lhistorique-de-vos-migrations-flyway-grace-au-baseline--4j4</guid>
      <description>&lt;p&gt;Ne perdez plus votre temps !&lt;/p&gt;

&lt;p&gt;Votre projet a plusieurs années derrière lui, il a évolué, et votre base de données n'est plus la même qu'à l'origine ? Il est temps de s'intéresser à la fonctionnalité Baseline de Flyway.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qu'est-ce que le baseline ?
&lt;/h2&gt;

&lt;p&gt;Le &lt;em&gt;Baseline&lt;/em&gt; de Flyway est une opération qui permet de marquer une base de données comme étant dans un certain état initial (baseline version).&lt;/p&gt;

&lt;p&gt;Une fois la migration effectuée, le Baseline crée une entrée dans la table de suivi des migrations de Flyway (&lt;em&gt;flyway_schema_history&lt;/em&gt;), indiquant que toutes les migrations antérieures à la version spécifiée sont considérées comme déjà appliquées.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quand utiliser le baseline ?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;u&gt;Migration d'une base de données existante :&lt;/u&gt; Vous avez une base de données déjà en production sans historique de migrations, et vous souhaitez commencer à utiliser Flyway.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Standardisation d'un processus de migration :&lt;/u&gt; Vous voulez aligner toutes les bases de données déployées à différentes étapes sur un point de départ commun.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Gagner un peu de temps :&lt;/u&gt; Vous souhaitez éviter que Flyway rejoue tout l'historique de vos migrations car seul l'état final vous intéresse.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Création de votre baseline
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Générer un fichier SQL contenant l’état final de votre base de données
&lt;/h3&gt;

&lt;p&gt;Commencer par générer un fichier SQL reflétant l’état final de votre base de données.&lt;br&gt;
Chaque SGBD offre un outil permettant d'exporter vos données (DDL et DML).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;En ligne de commande avec PostgreSQL:&lt;/em&gt;&lt;br&gt;
&lt;code&gt;pg_dump.exe" --file=C:\Dump\localhost-2024_12_13_17_53_48-dump.sql --inserts --username=votre_username --host=localhost --port=5432&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Avec votre IDE préféré :&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5mfo4m1gsrbf6qqbk03.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5mfo4m1gsrbf6qqbk03.png" alt="Image description" width="800" height="745"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Renommer le fichier généré au format compatible avec Flyway
&lt;/h3&gt;

&lt;p&gt;Renommez le fichier en respectant le &lt;a href="https://www.red-gate.com/blog/database-devops/flyway-naming-patterns-matter" rel="noopener noreferrer"&gt;Flyway Naming Patterns&lt;/a&gt;. Dans le cas d’un Baseline, le préfixe utilisé est B (pour Baseline). Par exemple, pour une version 2.0.0, le fichier devra être nommé :&lt;br&gt;
B2.0.0__Mon_Script_Baseline.sql&lt;/p&gt;
&lt;h3&gt;
  
  
  Vérifier la version du plugin flyway-core
&lt;/h3&gt;

&lt;p&gt;Assurez-vous d’utiliser une version récente du plugin flyway-core. En effet, le support du préfixe de Baseline n’était pas disponible dans les anciennes versions du plugin communautaire open-source (voir l’issue : &lt;a href="https://github.com/flyway/flyway/issues/3707" rel="noopener noreferrer"&gt;https://github.com/flyway/flyway/issues/3707&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Depuis la version 10.0.x, le préfixe de Baseline est pleinement pris en charge. Nous vous recommandons donc d’utiliser la dernière version disponible.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.flywaydb&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;flyway-core&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;10.22.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Un petit peu de conf
&lt;/h3&gt;

&lt;p&gt;Dans le &lt;em&gt;application.yml&lt;/em&gt; de votre module flyway, ajoutez ces deux lignes :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flyway:
    baseline-on-migrate: true
    baseline-version: 2.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠️ La version du &lt;em&gt;baseline&lt;/em&gt; doit être supérieure au dernier script joué par Flyway.&lt;/p&gt;

&lt;p&gt;⭐ Félicitations, la configuration est opérationnelle ! Lors de l'exécution des migrations Flyway, seuls les scripts ayant une version supérieure à celle définie par la baseline seront appliqués. Si vous travaillez avec une base de données vierge, tous les scripts antérieurs à la baseline seront ignorés.&lt;/p&gt;

</description>
      <category>baseline</category>
      <category>flyway</category>
      <category>postgres</category>
    </item>
  </channel>
</rss>
