轉載自東華果汁哥
Apache DophinScheduler 執行一段時間後,例項排程日誌越來越多,需要定期清理。
SQL 錯誤 [1701] [42000]: Cannot truncate a table referenced in a foreign key constraint (`dolphinscheduler`.`t_ds_task_instance`, CONSTRAINT `foreign_key_instance_id`) 如何刪除dophinscheduler 例項日誌
SQL 錯誤 [1701] [42000] 表示嘗試截斷(刪除所有行)一個表,該表在其他表的外來鍵約束中被引用。在這種情況下,dolphinscheduler.t_ds_task_instance
表被 foreign_key_instance_id
外來鍵約束引用。
為了解決這個問題,您可以按照以下步驟操作:
1. 刪除外來鍵約束:
在刪除表的資料之前,您需要刪除或禁用引用該表的外來鍵約束。這樣可以確保資料庫的完整性不受影響。
例如,您可以使用以下 SQL 語句來刪除外來鍵約束(請根據您的資料庫系統調整語法):
ALTER TABLE referencing_table DROP FOREIGN KEY foreign_key_instance_id;
其中 referencing_table
是引用 t_ds_task_instance
的表名。
2. 截斷表:
刪除外來鍵約束後,您現在可以截斷表。
TRUNCATE TABLE dolphinscheduler.t_ds_task_instance;
3. 重新新增外來鍵約束:
截斷表後,如果您需要,可以重新新增外來鍵約束。
ALTER TABLE referencing_table ADD CONSTRAINT foreign_key_instance_id FOREIGN KEY (instance_id) REFERENCES t_ds_task_instance(id);
請注意,在執行這些操作之前,請確保您有足夠的許可權,並且瞭解這些操作對您的資料庫的影響。在生產環境中操作之前,建議備份資料庫。
另外,如果您使用的是像 MySQL 這樣的資料庫,您也可以考慮使用 SET FOREIGN_KEY_CHECKS = 0
; 來臨時禁用外來鍵約束,然後執行截斷操作,之後再重新啟用外來鍵約束:
最終解決方案
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE dolphinscheduler.t_ds_task_instance;
SET FOREIGN_KEY_CHECKS = 1;
但請注意,這種方法會暫時違反資料庫的完整性,因此請謹慎使用。社群建議透過 open api的方式安全地刪除工作流例項和任務例項,open api可以刪除任務例項的執行日誌。
原文連結:https://blog.csdn.net/u013421629/article/details/136932478
本文由 白鯨開源 提供釋出支援!