0

我的软件:
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>
4

2 回答 2

3

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

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

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

于 2013-08-18T18:48:23.137 回答
3

@Mark O'Connor 写的是 100% 正确的。如果您以编程方式删除 LiquiBase 更改日志表所在的 Schema,您将收到以下错误:

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,因为它们没有任何商业价值......

于 2014-02-05T09:33:23.097 回答