3

非常奇怪的情況。我有一個根目錄changelog.groovy,它是當前的生產數據庫。我也有一個latest-changelog.groovy,它基本上是一些差異較小的差異修正(因爲差異並不完美)。嘗試刪除主鍵時數據庫遷移失敗,但僅有時會出現

建立一個空數據庫,下面的工作開始(方案1):

  • mysqldump的生產數據庫
  • 源到開發數據庫
  • 刪除包括最新-changelog.groovy
  • 的執行dbm-changelog-sync
  • add include of latest-changelog.groovy
  • 執行DBM更新

下不工作(場景2):

  • 下降dev的數據庫
  • 創建空dev的數據庫
  • 執行DBM更新

會發生什麼,最初的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") 
} 

我想在這裏做的是刪除主鍵,然後重新創建它們的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 方案2

回答

1

不知道這是問題的實際答案,但我已經找出是什麼導致它失敗。 book_project_note表中有3個FK。那些FK必須在dropPrimaryKey(duh)之前被刪除。

但是,這仍然不能告訴我它在方案1中可能如何工作,但我認爲它可能與addForeignKeyConstraint中的可延遲屬性有關。仍然試圖研究這實際上意味着什麼。

+0

您可能會嘗試運行dbm-update-sql以查看生成的SQL;應該在那裏有用。 – 2012-07-10 01:51:15

相關問題