我的软件:
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>
答案 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,因为它们没有任何商业价值......