flyway - instalar - Ruta de desplazamiento: esquema no vacío sin tabla de metadatos
flyway tutorial (3)
Creo que este error viene solo con la última versión de Flyway, es decir, por encima de 4.03. No recibí el proyecto anterior, pero lo obtuve cuando uso la versión 5.07 de Flyway en mi proyecto más reciente. Poniendo aquí el código que resuelve mis problemas.
public class FlywayConfig {
@Autowired
DataSource dataSource;
@Autowired
Config config;
@Bean
public Flyway flyway(){
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource);
flyway.setSqlMigrationPrefix("V");
flyway.setLocations(new String[] { config.getSqlLocation() });
flyway.setBaselineOnMigrate(true);
// *******************flyway.clean(); ********************// this will wipe out the DB, be careful
flyway.migrate();
return flyway;
}
}
Found non-empty schema "public" without metadata table! Use init() or set initOnMigrate to true to initialize the metadata table.
- Estoy usando Postgres 9.2 con Postgis 2.0. Esto significa que, de forma predeterminada, cuando creo una nueva base de datos, se creará una tabla en
public
esquemapublic
llamadaspatial_ref_sys
.
Cuando ejecuto la flyway migrate
en esta base de datos, aparece el error anterior. La ejecución de init
parece crear la tabla public.schema_version
y marcar la versión 1 como SUCCEDED sin ejecutar realmente el archivo de migración. También he intentado combinaciones de initOnMigrate
sin éxito. La vía aérea no está configurada para gestionar ningún esquema.
¿Alguna idea sobre cómo puedo ejecutar una migración en este escenario?
El título es un tanto contradictorio, ya que la base de datos no es virgen cuando instaló, a través de la extensión PostGIS, una serie de objetos en el esquema público.
Tu también puedes
- establezca
flyway.schemas
a un nuevo esquema, digamos my_app, que luego será creado automáticamente por Flyway. Su aplicación debe usar esta en lugar de pública (recomendado) - establezca
flyway.baselineOnMigrate
entrue
o invoqueflyway.baseline()
contra el esquema público. Esto funcionará, pero el público luego contendrá una mezcla de sus objetos de aplicación y los objetos de PostGIS
Si estás usando Gradle puedes correr
./gradlew -Dflyway.schemas=public flywayClean flywayMigrate
Donde público es el nombre de la base de datos que contiene la tabla schema_versions. Eso debería eliminar la tabla y los metadatos, así como la ejecución de las migraciones para actualizarla.