¡Claro que sí! Flyway de Redgate es una herramienta poderosa y sencilla para el control de versiones de bases de datos, lo que es crucial en el desarrollo moderno de aplicaciones. Aquí tienes un “cheatsheet” completo y bien estructurado de Flyway, optimizado para ser claro y conciso para una IA conversacional.


🚀 Flyway (by Redgate) Cheatsheet Completo 🚀

Flyway es una herramienta de control de versiones de bases de datos de código abierto que facilita la evolución de tu esquema de base de datos de manera confiable y robusta. Sigue el principio de “migraciones simples”. Simplemente escribe tus scripts de migración SQL (o Java) y Flyway se encarga de aplicarlos en el orden correcto.


1. 🌟 Conceptos Clave


2. 🛠️ Configuración Inicial y Flujo de Trabajo

Flyway puede usarse como una herramienta independiente (CLI), con Maven/Gradle, o integrado programáticamente en tu aplicación (ej. Spring Boot).

2.1. Nombres de Archivo de Migración

Las migraciones deben seguir un formato estricto:

V<VERSION>__<DESCRIPTION>.sql (para migraciones SQL) V<VERSION>__<DESCRIPTION>.java (para migraciones Java)

Ejemplos:

Ubicación de los Archivos: Por defecto, Flyway busca las migraciones en el directorio classpath:db/migration.

2.2. Integración con Spring Boot (Recomendado)

Spring Boot tiene soporte nativo para Flyway. Simplemente añade la dependencia:

Maven (pom.xml):

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>
&lt;!-- Si usas PostgreSQL, añade también el driver correspondiente -->
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

Gradle (build.gradle):

dependencies {
    implementation 'org.flywaydb:flyway-core'
    runtimeOnly 'org.postgresql:postgresql' // O tu driver de BD
}

Configuración en application.properties (o application.yml):

# Configuración de la base de datos (requerido para Flyway)
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=user
spring.datasource.password=password

# Configuración de Flyway (todas estas son opcionales y tienen valores por defecto)
spring.flyway.enabled=true # Habilita/deshabilita Flyway (por defecto: true)
spring.flyway.baseline-on-migrate=true # Si la base de datos no está vacía, crea la tabla de historial y registra 0
spring.flyway.clean-disabled=true # Previene que `flyway:clean` se ejecute por error en producción
spring.flyway.locations=classpath:db/migration # Ubicación de los scripts (por defecto)
spring.flyway.table=flyway_schema_history # Nombre de la tabla de historial (por defecto)
spring.flyway.sql-migration-prefix=V # Prefijo de los scripts versionados (por defecto)
spring.flyway.sql-migration-separator=__ # Separador (por defecto)
spring.flyway.sql-migration-suffix=.sql # Sufijo (por defecto)
spring.flyway.validate-on-migrate=true # Valida el checksum de las migraciones existentes antes de migrar

Flujo de Trabajo Básico con Spring Boot:

  1. Añade la dependencia Flyway.
  2. Configura tu base de datos en application.properties.
  3. Crea un directorio src/main/resources/db/migration.
  4. Crea tus scripts SQL dentro de ese directorio siguiendo el formato V<VERSION>__<DESCRIPTION>.sql.
  5. Inicia tu aplicación Spring Boot. Flyway detectará automáticamente la base de datos y aplicará las migraciones pendientes.

3. 📝 Comandos Comunes de Flyway (CLI/Maven/Gradle)

Aunque Spring Boot lo hace automáticamente, estos son los comandos que Flyway ejecuta o que puedes usar para control manual.

Ejemplo de uso con Maven:

# Desde la raíz de tu proyecto Maven
mvn flyway:info
mvn flyway:migrate
mvn flyway:clean # ¡Cuidado!

4. 🗃️ Tipos de Migraciones

4.1. Migraciones Versionadas (V<VERSION>__...sql)

Ejemplo: V1__create_users_table.sql

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4.2. Migraciones Repetibles (R__<DESCRIPTION>.sql)

Ejemplo: R__create_my_view.sql

CREATE OR REPLACE VIEW active_users_view AS
SELECT id, username, email
FROM users
WHERE status = 'active';

4.3. Migraciones Undo (U<VERSION>__<DESCRIPTION>.sql) (Deprecated/Rara vez usado en favor de nuevas migraciones)

4.4. Migraciones Java

// src/main/java/db/migration/V3__UpdateUserEmails.java
package db.migration; // Importante: el paquete debe coincidir con la ubicación configurada

import org.flywaydb.core.api.migration.BaseJavaMigration; // O JavaMigration
import org.flywaydb.core.api.callback.Callback; // Si usas callbacks
import org.flywaydb.core.api.Context;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.SingleConnectionDataSource;

public class V3__UpdateUserEmails extends BaseJavaMigration {

    @Override
    public void migrate(Context context) throws Exception {
        // Usa JdbcTemplate para interactuar con la base de datos
        JdbcTemplate jdbcTemplate = new JdbcTemplate(new SingleConnectionDataSource(context.getConnection(), true));
        jdbcTemplate.update("UPDATE users SET email = CONCAT(username, '@example.com') WHERE email IS NULL");
    }

    // Si implementas JavaMigration directamente, también necesitarás:
    // @Override public String getVersion() { return "3"; }
    // @Override public String getDescription() { return "Update user emails"; }
    // @Override public Integer getChecksum() { return null; } // Deja en null para que Flyway calcule
    // @Override public boolean is
}

5. ⚠️ Consideraciones Importantes ⚠️


6. 💡 Buenas Prácticas y Consejos


Este cheatsheet te proporciona una base sólida para trabajar con Flyway, cubriendo sus conceptos esenciales, su uso con Spring Boot y las mejores prácticas para gestionar de forma eficiente la evolución del esquema de tu base de datos.