부모 테이블과 여러 개의 상속 된 자식 테이블이 파티션으로 사용됩니다. 나는 수동으로 라우팅을 계산하고 각 INSERT
, UPDATE
및 DELETE
작업에 대한 처리가 필요하기 때문에 PG 10에서 새로운 방법을 사용하지 않습니다.PostgreSQL ON BEFORE DELETE 트리거가 상속 시나리오에서 부모 테이블에서 실행되지 않음
CREATE TRIGGER tg_collections_all
BEFORE UPDATE OR INSERT OR DELETE
ON cms.collections
FOR EACH ROW
EXECUTE PROCEDURE cms.collections_process();
그것은 화재 및 INSERT
및 UPDATE
에서 제대로 작동하지만 DELETE
에 :
나는이 트리거를 가지고있다.
raise exception '(%)', TG_OP;
행 삭제 :
나는DELETE
이 발사되지 증명하기 위해
cms.collections_process()
에 선 # 1과 다음 줄을 추가했다.
docs 상태 :
이에행 레벨 트리거는 영향을받는 모든 파티션 또는 하위 테이블 소성된다.
아이디어가 있으십니까?
문제는 특허에 대해 모든 명령을 실행하고 있지만 삭제 만 실행하는 것은 아니라는 것입니다. 그러나 그것은 어쨌든 아이에서 삭제됩니다. 트리거는 유일한 경로입니다. – IamIC
나의 예제에서 보았 듯이'parent'를 업데이트해도 트리거는 실행되지 않지만 행은'child'에 있습니다. 모든 상속 자녀에 대해 트리거를 정의해야하는 것처럼 보입니다. –
고맙습니다. 알겠습니다. PG는 레코드를 찾는 다른 방법이 없으므로 모든 하위 테이블을 검사해야합니다. 나는 다른 방법으로 접근해야한다고 생각한다 : 전용 UPDATE와 DELETE 함수를 가지고 이러한 함수에 대한 접근을 금지한다. – IamIC