运行 Flyway task 有什么办法可以排除一些表吗?

Is there any way to run Flyway task excluding some tables?

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

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

ERROR: cannot drop table spatial_ref_sys because extension postgis requires it

[ERROR] Hint: You can drop extension postgis instead.

但是,我不想删除这些项目,它们在我的应用程序逻辑之外,因为它们只是“辅助”。

我看到两个问题,Axel Fontaine 说不支持忽略某些 table(s) 的功能(两个问题都已有两年或更长时间),我什至克隆了 GitHub repo 自己将此功能添加到 Flyway,我一直在阅读可以实现此更改的代码的某些部分;但我怀疑它会影响代码的几个部分,而我对此的不了解可能会使事情变得更难..

所以,我正在寻找一些帮助来实施更改,或者可能是一些想法来解决这个问题..

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

我在测试环境中遇到了这个问题,我想通过 flyway 删除架构。我通过操纵 flyway spring bean 序列来修复它。首先,我在 flyway.clean() 之前删除了 postgis 扩展,然后在 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;
}