【发布时间】:2012-07-09 06:47:14
【问题描述】:
非常奇怪的情况。我有一个根 changelog.groovy,它是当前的生产数据库。我还有一个 latest-changelog.groovy,它基本上是一个带有一些细微差异修正的差异(因为差异并不完美)。
从一个空数据库开始,以下工作(场景 1):
- mysqldump 生产数据库
- 源到开发数据库
- 删除包含 latest-changelog.groovy
- 执行 dbm-changelog-sync
- 添加包含 latest-changelog.groovy
- 执行 dbm 更新
以下方法不起作用(场景 2):
- 删除开发数据库
- 创建空的开发数据库
- 执行数据库更新
最初的 changelog.groovy 运行顺利。但是当它到达 latest-changelog.groovy 时,它会失败并显示以下内容:
原因:java.sql.SQLException:重命名错误 './main_dev/#sql-b4_2334' 到 './main_dev/book_project_note' (errno: 150)
我有一个这样定义的表:
mysql> desc book_project_note;
+---------------------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------------+------------+------+-----+---------+-------+
| book_project_id | bigint(20) | NO | PRI | NULL | |
| note_id | bigint(20) | NO | PRI | NULL | |
| book_project_note_type_id | bigint(20) | NO | PRI | NULL | |
+---------------------------+------------+------+-----+---------+-------+
以下变更集是失败的:
changeSet(author: "gdboling (generated)", id: "1341248060406-80") {
dropPrimaryKey(tableName: "book_project_note")
}
我在这里尝试做的是删除主键,然后使用以下内容重新创建其中的 2 个:
changeSet(author: "gdboling (generated)", id: "1341248060406-72") {
addPrimaryKey(columnNames: "book_project_id, note_id", constraintName: "book_project_PK", tableName: "book_project_note")
}
我想知道为什么它适用于 场景 1,但在 场景 2 中失败。
【问题讨论】:
标签: grails database-migration liquibase composite-primary-key