두 테이블, 및 subtasks
이 있습니다. 모든 하위 작업은 상태가 있습니다 (처음 삽입 될 때 보류 중). 그런 다음 모든 하위 작업을 업데이트하는 스레드를 실행합니다 (상태가 READY가됩니다). 내가 원하는 것은 주어진 작업의 모든 하위 작업이 준비 상태가되고, 부모 작업이 준비 상태가 될 때입니다. 트리거 후 SQL이 올바르게 계산되지 않습니다.
ID Pending_count
2 3
1 3
3 3
4 3
그리고 그 위에
, 테스트가 완료된 후 : 나는 하나의 작업 4 개 하위 이것을 테스트 할 때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();
가 여기 trigger_log
테이블에 삽입 될 내용은 다음과 같습니다 여기에 내가 쓴 트리거입니다 , 모든 하위 타스크는 READY 상태에 있지만 주요 타스크는 여전히 보류 중입니다. 기본적으로 트리거는 올바르게 계산되지 않습니다. 어떤 아이디어?
관련 스레드 : http://stackoverflow.com/questions/17112582/trigger-procedure-in-postgresql –
는 동시성 문제처럼 보인다. 병렬 쓰레드가'READ COMMITTED' 고립 모드에서 같은 태스크에 접근한다면, 당신이 얻는 결과가 기대된다. 'SERIALIZABLE' 모드를 고려할 수도 있습니다. –