DEV Community

Emilien Mamalet for Onepoint

Posted on • Edited on

4 1 2 2 3

Ne jouez plus tout l'historique de vos migrations Flyway grâce au baseline !

Ne perdez plus votre temps !

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.

Qu'est-ce que le baseline ?

Le Baseline de Flyway est une opération qui permet de marquer une base de données comme étant dans un certain état initial (baseline version).

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

Quand utiliser le baseline ?

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

Création de votre baseline

Générer un fichier SQL contenant l’état final de votre base de données

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

En ligne de commande avec PostgreSQL:
pg_dump.exe" --file=C:\Dump\localhost-2024_12_13_17_53_48-dump.sql --inserts --username=votre_username --host=localhost --port=5432

Avec votre IDE préféré :
Image description

Renommer le fichier généré au format compatible avec Flyway

Renommez le fichier en respectant le Flyway Naming Patterns. 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é :
B2.0.0__Mon_Script_Baseline.sql

Vérifier la version du plugin flyway-core

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 : https://github.com/flyway/flyway/issues/3707).

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.

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>10.22.0</version>
</dependency>
Enter fullscreen mode Exit fullscreen mode

Un petit peu de conf

Dans le application.yml de votre module flyway, ajoutez ces deux lignes :

flyway:
    baseline-on-migrate: true
    baseline-version: 2.0.0
Enter fullscreen mode Exit fullscreen mode

⚠️ La version du baseline doit être supérieure au dernier script joué par Flyway.

⭐ 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.

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay