Liquibase:关系"databasechangeloglock"已经存在,使用grails插件和非默认模式



我使用的是grails 2.0.3、数据库迁移(likibase)插件1.1和postgres 9.1。

我看到了我认为与其他用户描述的问题相同的问题,但有皱纹:

  • 使用maven和postgresdb运行liquibase的问题
  • https://liquibase.jira.com/browse/CORE-183
  • [删除了其他引用,没有足够的信誉:(]

皱纹是:

  1. 我使用的是grails和数据库迁移插件
  2. 生产数据库不使用默认架构
  3. 我必须在启动时使用自动数据库迁移(grails.plugin.databasemigration.updateOnStart=true),因为没有开发人员可以访问实际的生产数据库

我对这个问题的理解是,liquibase正在检查默认模式是否存在其维护表,然后尝试在正确的位置创建表,即非默认模式。当然,它们在第一次执行死刑后就已经存在了。通过指定命令行选项似乎有一个解决方法,但我没有这个选项,因为需要在部署的grails应用程序中自动运行。

有没有办法让数据库迁移插件满足我的需求?告诉DBA以不同的方式组织模式不是一种选择。

提前感谢,Ray A.Conner

对我来说,这是缺失的所有者权利。这样,登录的用户就找不到表,但也无法创建它,因为它就在那里。

我的解决方案是将所有者更改为正确的人。

前提条件和重构命令具有schemaName属性。

<tableExists schemaName="myschema" tableName="..."/>
<createTable schemaName="myschema" tableName="..."/>

您也可以将其参数化:

<databaseChangeLog ..>
<property name="schema.name" value="myschema"/>
....
<changeset ...>
<createTable schemaName="${schema.name]" tableName="..."/>
</changeset>
</databaseChangeLog>

对于Liquibase本身,您可以设置defaultSchemaName,在您的情况下(Grails),它应该是:

grails.plugin.databasemigration.updateOnStartDefaultSchema

最新更新