tutorial instalar descargar como caracteristicas flyway

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 esquema public llamada spatial_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 en true o invoque flyway.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.