Liquibase: база данных отношенияchangeloglock уже существует, с использованием плагина grails и нестандартной схемы

Я использую grails 2.0.3, плагин для миграции базы данных (Liquibase) 1.1 и postgres 9.1.

Я вижу то, что, по моему мнению, является той же проблемой, которую описали другие пользователи, но с морщинами:

Морщины таковы:

  1. Я использую grails и плагин для миграции базы данных.
  2. В производственной базе данных не используется схема по умолчанию.
  3. Я должен использовать автоматическую миграцию базы данных при запуске (grails.plugin.databasemigration.updateOnStart = true), потому что ни один разработчик не имеет доступа к фактическим производственным базам данных.

Насколько я понимаю, проблема заключается в том, что Liquibase проверяет схему по умолчанию на наличие ее таблиц обслуживания, а затем пытается создать таблицы в нужном месте, а не схему по умолчанию. Но, конечно, они уже существуют после первой казни. Кажется, есть обходной путь, указав параметр командной строки, но у меня нет этого варианта из-за требования автоматического запуска в развернутом приложении grails.

Есть ли способ заставить плагин миграции базы данных делать то, что мне нужно? Сказать администраторам баз данных, чтобы они организовали схемы по-другому, не вариант.

Заранее спасибо, Рэй А. Коннер


person Ray Conner    schedule 02.10.2012    source источник


Ответы (2)


со мной это было пропавшее право владельца. Таким образом, таблица не может быть найдена вошедшим в систему пользователем, но также не может быть создана, поскольку она существует.

Мое решение состояло в том, чтобы сменить владельца на правильного человека.

person Frischling    schedule 04.02.2021

Предварительные условия и команды рефакторинга принимают атрибут 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
person Mirko Adari    schedule 07.10.2012
comment
Это для рефакторинга таблиц в схеме моего приложения. Эта проблема связана с таблицами, которые Likibase создает для себя, для хранения наборов изменений и для внутренней блокировки. - person Ray Conner; 09.10.2012
comment
Я уволился с работы, на которой возникла проблема, и еще не смог настроить среду для проверки вашего редактирования. Надеюсь, в скором времени я смогу это сделать. - person Ray Conner; 05.11.2012