Liquibase dropFirst 与 postgis
Liquibase dropFirst with postgis
我正在尝试通过 Liquibase 将 postgis 扩展添加到我的 postgressql 数据库,这是我的做法:
<sql>CREATE EXTENSION IF NOT EXISTS postgis;</sql>
它工作正常,问题是在我开发时我希望每次重新启动我的网络服务器时都重置我的数据库,所以我在 spring 中设置了 liquibase,就像这样
@Bean(name = "liquibase")
@DependsOn("dataSource")
@Profile("dev")
public SpringLiquibase liquibaseDev() {
SpringLiquibase springLiquibase = new SpringLiquibase();
springLiquibase.setDataSource(this.dataSource());
springLiquibase.setChangeLog("classpath:liquibase.xml");
springLiquibase.setDefaultSchema(this.environment.getProperty("jdbc.defaultSchema"));
springLiquibase.setDropFirst(true);
return springLiquibase;
}
所以 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 解决了这个问题:
@Bean(name = "liquibase")
@DependsOn("dataSource")
@Profile("dev")
public SpringLiquibase liquibaseDev() {
ScriptUtils.executeSqlScript(this.dataSource().getConnection(), new ClassPathResource("delete-postgis.sql"));
SpringLiquibase springLiquibase = new SpringLiquibase();
springLiquibase.setDataSource(this.dataSource());
springLiquibase.setChangeLog("classpath:liquibase.xml");
springLiquibase.setDefaultSchema(this.environment.getProperty("jdbc.defaultSchema"));
springLiquibase.setDropFirst(true);
return springLiquibase;
}
文件 src/main/resources/delete-postgis.sql 为
DROP EXTENSION IF EXISTS postgis;
这并不花哨,但确实有效。
我正在尝试通过 Liquibase 将 postgis 扩展添加到我的 postgressql 数据库,这是我的做法:
<sql>CREATE EXTENSION IF NOT EXISTS postgis;</sql>
它工作正常,问题是在我开发时我希望每次重新启动我的网络服务器时都重置我的数据库,所以我在 spring 中设置了 liquibase,就像这样
@Bean(name = "liquibase")
@DependsOn("dataSource")
@Profile("dev")
public SpringLiquibase liquibaseDev() {
SpringLiquibase springLiquibase = new SpringLiquibase();
springLiquibase.setDataSource(this.dataSource());
springLiquibase.setChangeLog("classpath:liquibase.xml");
springLiquibase.setDefaultSchema(this.environment.getProperty("jdbc.defaultSchema"));
springLiquibase.setDropFirst(true);
return springLiquibase;
}
所以 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 解决了这个问题:
@Bean(name = "liquibase")
@DependsOn("dataSource")
@Profile("dev")
public SpringLiquibase liquibaseDev() {
ScriptUtils.executeSqlScript(this.dataSource().getConnection(), new ClassPathResource("delete-postgis.sql"));
SpringLiquibase springLiquibase = new SpringLiquibase();
springLiquibase.setDataSource(this.dataSource());
springLiquibase.setChangeLog("classpath:liquibase.xml");
springLiquibase.setDefaultSchema(this.environment.getProperty("jdbc.defaultSchema"));
springLiquibase.setDropFirst(true);
return springLiquibase;
}
文件 src/main/resources/delete-postgis.sql 为
DROP EXTENSION IF EXISTS postgis;
这并不花哨,但确实有效。