0
我們的HSQLDB數據庫具有從PAYMENTS表到USERS表的FK約束。我們在這裏做錯了什麼是創建一個約束,而不給它一個特定的名稱。這會導致HSQLDB爲你生成一個名字,例如SYS_FK_10985。HSQLDB無法刪除未找到的外鍵約束對象
我所做的是爲Liquibase編寫一個自定義更改集,它將查找索引的名稱並將其刪除。什麼是腳本所做的是非常簡單的:
ALTER TABLE PAYMENTS DROP CONSTRAINT SYS_FK_10985;
成功執行補丁和降約束的命令是:
SELECT constraint_name FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE TABLE_NAME= 'PAYMENTS' AND COLUMN_NAME= 'USER_ID';
如果找到了,它是由相同的變更集執行以下查詢回落添加到HSQLDB的.log文件中,然而,當我們想要運行HSQLDB實例時,它會拋出一個錯誤,指出無法找到該對象。
日誌文件如下所示:
的主要問題是錯誤的索引(一個不存在的一個)在日誌文件中,這自然會導致被丟棄HSQLDB拋出異常。更糟糕的是:發生異常時,該行後的所有內容都將從日誌文件中刪除,甚至不會存儲在.data文件中。
約束名稱更改是否可能導致更改集名稱錯誤?
請不要將截圖粘貼到問題中,除非它是一個圖形相關的問題。文字更好。 – SteveDonie