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

时间:2012-10-02 02:07:26

标签: postgresql grails database-migration liquibase

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

我看到的是我认为这些其他用户描述的问题,但有皱纹:

皱纹就是:

  1. 我正在使用grails和数据库迁移插件。
  2. 生产数据库不使用默认架构。
  3. 必须在启动时使用自动数据库迁移(grails.plugin.databasemigration.updateOnStart = true),因为没有开发人员可以访问实际的生产数据库。
  4. 我对该问题的理解是liquibase正在检查其维护表是否存在的默认模式,然后尝试在正确的位置创建表,即非默认模式。但当然,它们在第一次执行后就已存在。通过指定命令行选项似乎有一种解决方法,但我没有这个选项,因为要求在部署的grails应用程序中自动运行。

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

    提前致谢, Ray A. Conner

2 个答案:

答案 0 :(得分:3)

前提条件和重构命令采用属性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

答案 1 :(得分:3)

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

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