3

很奇怪的情况。我有一个根 changelog.groovy,它是当前的生产数据库。我还有一个 latest-changelog.groovy,它基本上是一个带有一些细微差异修正的差异(因为差异并不完美)。

从空数据库开始,以下工作(场景 1):

  • mysqldump 生产数据库
  • 源到开发数据库
  • 删除包含 latest-changelog.groovy
  • 执行 dbm-changelog-sync
  • 添加包含 latest-changelog.groovy
  • 执行 dbm-update

以下不起作用(场景 2):

  • 删除开发数据库
  • 创建空的开发数据库
  • 执行 dbm-update

会发生什么是初始 changelog.groovy 运行顺利。但是当它到达 latest-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")
}

我在这里尝试做的是删除主键,然后使用以下内容重新创建其中的 2 个:

changeSet(author: "gdboling (generated)", id: "1341248060406-72") {
  addPrimaryKey(columnNames: "book_project_id, note_id", constraintName: "book_project_PK", tableName: "book_project_note")
}

我想知道为什么它适用于Scenario 1但在Scenario 2中失败。

4

1 回答 1

1

不确定这是问题的实际答案,但我已经弄清楚是什么导致它失败。book_project_note 表上有 3 个 FK。这些 FK 必须在 dropPrimaryKey 之前被丢弃(duh)。

但是,这仍然没有告诉我它在场景 1 中可能如何工作,但我认为它可能与 addForeignKeyConstraint 中的可延迟属性有关。仍在尝试研究这实际上意味着什么。

于 2012-07-09T21:21:24.907 回答