春天 – Liquibase dropFirst with postgis

前端之家收集整理的这篇文章主要介绍了春天 – Liquibase dropFirst with postgis前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试通过Liquibase将postgis扩展添加到我的postgressql数据库,这是我如何做到的:

  1. <sql>CREATE EXTENSION IF NOT EXISTS postgis;sql>

它运行正常,问题是当我正在开发时我希望每次重新启动我的Web服务器时都重置我的数据库,所以我在春天设置liquibase就像这样

  1. @Bean(name = "liquibase")
  2. @DependsOn("dataSource")
  3. @Profile("dev")
  4. public SpringLiquibase liquibaseDev() {
  5. SpringLiquibase springLiquibase = new SpringLiquibase();
  6. springLiquibase.setDataSource(this.dataSource());
  7. springLiquibase.setChangeLog("classpath:liquibase.xml");
  8. springLiquibase.setDefaultSchema(this.environment.getProperty("jdbc.defaultSchema"));
  9. springLiquibase.setDropFirst(true);
  10. return springLiquibase;
  11. }

所以Liquibase试图在启动时删除所有内容,包括postgis视图.这导致了这个错误

org.postgresql.util.PsqlException: ERROR: cannot drop view geography_columns because extension postgis requires it
Indice : You can drop extension postgis instead.

但是我应该如何告诉liquibase在放弃其他所有内容之前删除扩展?有没有办法告诉Liquibase如何删除数据库

我正在使用的版本:

> Spring IO 2.0.7
> Liquibase 3.4.2(Spring IO设置的版本)
> Postgres 9.5

最佳答案
解决了这个问题,添加了一些在Liquibase启动之前执行的sql

  1. @Bean(name = "liquibase")
  2. @DependsOn("dataSource")
  3. @Profile("dev")
  4. public SpringLiquibase liquibaseDev() {
  5. ScriptUtils.executesqlScript(this.dataSource().getConnection(),new ClassPathResource("delete-postgis.sql"));
  6. SpringLiquibase springLiquibase = new SpringLiquibase();
  7. springLiquibase.setDataSource(this.dataSource());
  8. springLiquibase.setChangeLog("classpath:liquibase.xml");
  9. springLiquibase.setDefaultSchema(this.environment.getProperty("jdbc.defaultSchema"));
  10. springLiquibase.setDropFirst(true);
  11. return springLiquibase;
  12. }

文件src / main / resources / delete-postgis.sql正在

  1. DROP EXTENSION IF EXISTS postgis;

这不是花哨的,但它确实有效.

猜你在找的Spring相关文章