有没有办法运行Flyway任务排除一些表?

时间:2017-10-09 23:36:31

标签: postgresql postgis flyway ignore

我目前正在使用Flyway来管理使用Postgis(PostgreSQL地理空间扩展)的应用程序上的迁移。

此插件使用名为spatial_ref_sys的表格,该表格位于应用程序使用的同一架构中,当我致电mvn flyway:clean时,我收到错误消息,指示Flyway无法删除此内容table(它是使用用户postgres创建的);如果我将所有者更改为我的应用程序数据库用户,则错误将更改为:

  

错误:无法删除表spatial_ref_sys,因为扩展名postgis需要它

     

[错误]提示:您可以删除扩展名postgis。

但是,我不想丢弃这些项目,这些项目在我的应用程序逻辑之外,因为它们只是" auxiliars"。

我已经看到两个问题,其中Axel Fontaine说忽略某些表的功能不受支持(这两个问题都是两年或更久),我甚至克隆了GitHub回购,以便我自己将此功能添加到Flyway ,我已经阅读了可以实现此更改的代码的某些部分;但是我怀疑它会影响代码的几个部分,而我对它的不知情可能会使事情变得更难......

所以,我正在寻求一些帮助来实施这一变化,或者可能有一些想法来解决这个问题..

我正在考虑简单地做整个数据库的DROP并重新创建它,然后重新创建地理空间扩展(Postgis,PGRouting等),并使用Flyway进行迁移,但如果我不适合在开发过程中必须多次这样做..

1 个答案:

答案 0 :(得分:1)

我在测试环境中遇到了这个问题,我想通过运行方式删除架构。我通过操纵飞行器春豆序列来修复它。首先,我将postgis扩展名放在flyway.clean()之前,然后在V1__init.sql的第一行中添加CREATE EXTENSION postgis SCHEMA public;

@Bean
@Profile("test")
public Flyway flyway(DataSource dataSource) {
    Flyway flyway = new Flyway();
    flyway.setDataSource(dataSource);
    flyway.setLocations("classpath:db/migration");

    runSql("drop extension IF EXISTS postgis CASCADE;", dataSource);

    flyway.clean();
    flyway.migrate();

    return flyway;
}