我有两张桌子,tasks
和subtasks
。每个子任务都有一个状态(第一次插入时为 PENDING)。然后我运行更新每个子任务的线程(状态变为就绪)。我想要的是当给定任务的每个子任务都准备好时,它们的父任务也准备好。这是我写的触发器:
CREATE FUNCTION update_task_status() RETURNS trigger AS $$
BEGIN
INSERT INTO trigger_log SELECT NEW.subtask_id, COUNT(fo_id) FROM subtasks WHERE fo_id = NEW.fo_id AND status <> 'READY';
UPDATE tasks
SET status = 'READY'
WHERE task_id = NEW.fo_id
AND NOT EXISTS (
SELECT 1
FROM subtasks
WHERE fo_id = NEW.fo_id
AND status <> 'READY'
);
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER update_task AFTER INSERT OR UPDATE ON subtasks
FOR EACH ROW EXECUTE PROCEDURE update_task_status();
当我用一项任务和 4 个子任务对此进行测试时,trigger_log
表中插入了以下内容:
ID Pending_count
2 3
1 3
3 3
4 3
最重要的是,在测试完成后,所有子任务都处于 READY 状态,但它们的主要任务仍然是 PENDING。基本上触发器计数不正确。有任何想法吗?