我目前正在使用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进行迁移,但如果我不适合在开发过程中必须多次这样做..
答案 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;
}