非常奇怪的情况。我有一个root changelog.groovy,这是当前的生产数据库。我还有一个最新的changelog.groovy,它基本上是一个带有一些小的差异校正的差异(因为差异并不完美)。
从空数据库开始,以下工作(方案1 ):
以下内容不起作用(场景2 ):
最初的changelog.groovy会顺利运行。但是当它到达最新的changelog.groovy时,它会失败并显示以下内容:
引起:java.sql.SQLException:重命名时出错 './main_dev/#sql-b4_2334'到 './main_dev/book_project_note'(错误号: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")
}
我在这里要做的是删除主键,然后使用以下内容重新创建其中的两个:
changeSet(author: "gdboling (generated)", id: "1341248060406-72") {
addPrimaryKey(columnNames: "book_project_id, note_id", constraintName: "book_project_PK", tableName: "book_project_note")
}
我想知道为什么它适用于场景1 ,但在场景2 中失败。
答案 0 :(得分:1)
不确定这是问题的实际答案,但我已经找出导致其失败的原因。 book_project_note表上有3个FK。那些FK必须在dropPrimaryKey(duh)之前删除。
然而,这仍然没有告诉我它在场景1中是如何工作的,但我认为它可能与addForeignKeyConstraint中的deferrable属性有关。仍在努力研究这实际意味着什么。