Grails 中的 Liquibase:“空结果集,预期为一行”

Posted

技术标签:

【中文标题】Grails 中的 Liquibase:“空结果集,预期为一行”【英文标题】:Liquibase in Grails: “Empty result set, expected one row” 【发布时间】:2012-11-09 04:12:43 【问题描述】:

我对 Grails 域类进行了更改并运行

grails db-gorm-diff 2012-11-20-domain-class-change.groovy --add(显然那里有另一个名字)

并且从 Liquibase 收到“更改锁定”错误:

Error executing bootstraps: liquibase.exception.LockException: Could not acquire change log lock. Currently locked by computer-name.local […]

所以(看起来很愚蠢)按照an aged thread dealing with a similar problem with the Autobase plugin 中的建议,我删除了更改日志锁定表中的行:

mysql> delete from DATABASECHANGELOGLOCK;

现在得到这个漂亮的 Liquibase 错误:

Error executing bootstraps: liquibase.exception.DatabaseException: Empty result set, expected one row

这清楚地告诉我,改变这一点为时已晚,我不应该从表中删除该行。

我现在该怎么办?

【问题讨论】:

【参考方案1】:

我在一般 Liquibase 相关的地方挖掘了更多内容,现在了解到我可以简单地 drop the table altogether 并在启动时重新创建它。这似乎奏效了。

【讨论】:

【参考方案2】:

插件中有一个脚本 - 使用http://grails-plugins.github.com/grails-database-migration/docs/manual/ref/Maintenance%20Scripts/dbm-release-locks.html

【讨论】:

【参考方案3】:

看看http://forum.liquibase.org/topic/message-regarding-an-empty-result-set-for-databasechangeloglock 。您只需将 'locked' 行设置为 1 或完全删除 databasechangelock 表(然后将重新创建)

【讨论】:

以上是关于Grails 中的 Liquibase:“空结果集,预期为一行”的主要内容,如果未能解决你的问题,请参考以下文章

使用不匹配的外键连接两个表时的空结果集

如何使用 grails 迁移增加 VARCHAR 大小

Grails 2.3 迁移脚本不会在集成测试期间运行

Doctrine 存储库返回空结果集

JDBC:空/空结果集?

我无法捕获 FMDB 空结果集