转载自东华果汁哥

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

本文由 白鲸开源科技 提供发布支持!

海豚调度
84 声望21 粉丝

Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。