私は2つのテーブルを持っていtasks
ますsubtasks
. すべてのサブタスクにはステータスがあります (最初に挿入されたときは PENDING)。次に、すべてのサブタスクを更新するスレッドを実行します (ステータスが READY になります)。私が望むのは、特定のタスクのすべてのサブタスクが READY になり、その親タスクも準備が整うときです。ここに私が書いたトリガーがあります:
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();
これを 1 つのタスクと 4 つのサブタスクでテストすると、trigger_log
表に次のように挿入されます。
ID Pending_count
2 3
1 3
3 3
4 3
さらに、テストが終了すると、すべてのサブタスクは READY 状態になりますが、それらのメイン タスクはまだ PENDING のままです。基本的にトリガーは正しくカウントされません。何か案は?