Liquibase:dropAll没有删除架构

时间:2013-08-18 15:59:36

标签: postgresql maven schema liquibase

我的软件:
Maven 3.0.4
Liquibase:3.0.2
Postgresql:9.1.9
JavaSE:1.7.0_25

我的问题:
我用liquibase

创建了一些模式
<changeSet id="create-customermgmt-schema" author="nl">  
   <sql>CREATE SCHEMA "customermgmt";</sql>  
</changeSet>

如果我尝试执行liquibase:dropAll我得到这个:

[INFO] Scanning for projects...  
[INFO]                                                                           
[INFO] ------------------------------------------------------------------------    
[INFO] Building akufit.server 0.0.1-SNAPSHOT    
[INFO] ------------------------------------------------------------------------   
[INFO]   
[INFO] --- liquibase-maven-plugin:3.0.2:dropAll (default-cli) @ akufit.server ---   
[INFO] ------------------------------------------------------------------------   
[INFO] Executing on Database: jdbc:postgresql://localhost:5432/akufit   
INFO 8/18/13 5:45 PM:liquibase: Successfully acquired change log lock   
INFO 8/18/13 5:45 PM:liquibase: Dropping Database Objects in schema: akufit.public   
INFO 8/18/13 5:45 PM:liquibase: Creating database history table with name: public.databasechangelog    
INFO 8/18/13 5:45 PM:liquibase: Successfully released change log lock    
INFO 8/18/13 5:45 PM:liquibase: Successfully released change log lock    
[INFO] ------------------------------------------------------------------------   
[INFO]     
[INFO] ------------------------------------------------------------------------   
[INFO] BUILD SUCCESS   
[INFO] ------------------------------------------------------------------------   
[INFO] Total time: 5.978s   
[INFO] Finished at: Sun Aug 18 17:45:54 CEST 2013   
[INFO] Final Memory: 8M/85M     
[INFO] ------------------------------------------------------------------------`   

但是我的架构仍在那里,没有任何东西下垂。

我验证了所有表和模式都属于liquibase设置中的用户。 如果您需要更多信息,请写信。

也许你可以帮助我。感谢。

的pom.xml:

<plugin>   
    <groupId>org.liquibase</groupId>   
    <artifactId>liquibase-maven-plugin</artifactId>   
    <version>3.0.2</version>   
    <configuration>   
        <changeLogFile>src/main/resources/db-changelog.xml</changeLogFile>   
    <driver>org.postgresql.Driver</driver>   
    <url>jdbc:postgresql://localhost:5432/akufit</url>   
    <username>***</username>   
    <password>***</password>   
    </configuration>   
    <dependencies>   
        <dependency>   
        <groupId>postgresql</groupId>   
        <artifactId>postgresql</artifactId>   
        <version>9.0-801.jdbc4</version>   
    </dependency>   
    </dependencies>   
</plugin>

2 个答案:

答案 0 :(得分:3)

Liquibase旨在管理应用程序架构中的对象。这解释了为什么不支持“创建模式”数据库操作。

这并不能阻止有人编写自定义SQL操作来创建/删除模式,但这会导致一些问题,例如liquibase会在模式中创建两个额外的簿记表,这些表也将被清除....

有没有充分的理由为什么架构创建不能在liquibase之外完成?我通常为每个应用程序实例创建一个新的模式和关联的用户。通过这种方式,我不必使用我的数据库的管理员帐户配置liquibase。

答案 1 :(得分:3)

@Mark O&#39; Connor所写的是100%正确的。如果您以编程方式删除LiquiBase更改日志表所在的模式,则会出现以下错误:

SEVERE 5/02/14 10:26:liquibase: liquibase/db.dropschema.changelog.xml::dropschema-1::debacked: Could not release lock

这是因为您还删除了LiquiBase更改日志表。

您可以通过设置参数liquibase.changelogSchemaName轻松解决此问题。这样,LiquiBase Changelog表就有了自己的架构。

顺便说一下,我总是设置这个参数,这样LiquiBase Changelog表就不会弄乱你的Schema,因为它们没有任何商业价值......