2016-08-18 52 views
5

Próbuję dodać rozszerzenie PostGIS do mojej bazy danych PostgreSQL przez Liquibase, oto jak robiłem go:Liquibase dropFirst z PostGIS

<sql>CREATE EXTENSION IF NOT EXISTS postgis;</sql> 

To działa dobrze, problem jest, gdy Zajmuję chcę moja baza danych będzie zresetowane za każdym razem ponownie uruchomić serwer WWW, tak mam ustawione liquibase wiosną jak to

@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; 
} 

I tak Liquibase próbuje rzucić wszystko, łącznie z widokiem PostGIS, przy starcie. Które doprowadziły do ​​tego błądzenia

Ale jak mam powiedzieć liquibase, aby upuścić rozszerzenia przed upuszczeniem wszystkiego innego? Czy istnieje sposób, aby powiedzieć Liquibase, jak usunąć bazę danych?

Wersje Używam:

  • Wiosna IO 2.0.7
  • Liquibase 3.4.2 (w wersji ustalonej przez wiosennym IO)
  • PostgreSQL 9,5
+0

Wierzę, że firma liquibase nie wie o rozszerzeniach w postgresie i dlatego ich nie upuszcza. Liquibase spróbuje znaleźć wszystkie obiekty w schemacie, którego używasz, a następnie zbuduje listę instrukcji upuszczania i wykona go. Może to pomaga, gdy dodajesz deklarację schematu do instrukcji tworzenia rozszerzenia jak 'CREATE EXTENSION IF NOT EXISTS postgis SCHEMA public;' - ale to jest tylko domysły na wolności i może nie mieć znaczenia ... – Jens

+0

Jako "public" jest domyślnym schematem, jest już dodany do tego. Tak, liquibase wydaje się nie wiedzieć o rozszerzeniu postgreatora, więc wydaje się, że musimy uciekać się do jakiejś innej alternatywy do zarządzania tym – lepak

Odpowiedz

3

rozwiązał ten dodając trochę SQL, który jest wykonywany przed rozpoczęciem Liquibase:

@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; 
} 

z pliku src/main/resources/delete-postgis.sql będąc

DROP EXTENSION IF EXISTS postgis; 

To nie jest wyszukany, ale to działa.