8

我正在使用 grails 2.0.3、数据库迁移(liquibase)插件 1.1 和 postgres 9.1。

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

皱纹是这样的:

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

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

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

在此先感谢,雷 A. 康纳

4

2 回答 2

3

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

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

于 2021-02-04T19:11:16.277 回答
2

Preconditions and refactoring commands take an attribute schemaName.

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

You can also parametrize it:

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

For Liquibase itself, you can set defaultSchemaName, in your case (Grails) this should be:

grails.plugin.databasemigration.updateOnStartDefaultSchema
于 2012-10-07T19:18:13.690 回答