포스트그레다양한 클라이언트가 있습니다 Perl, Tcl, Python 및 C와 같은 인터페이스와 세 가지절차적 언어(PL). 그것은 또한 C 함수를 토토 핫 작업으로 호출할 수 있습니다. 참고하세요 STATEMENT 수준 토토 핫 이벤트는 현재 지원되지 않습니다. 버전. 현재 INSERT에 BEFORE 또는 AFTER를 지정할 수 있습니다. 토토 핫 이벤트로 튜플을 삭제하거나 업데이트합니다.
토토 핫 이벤트가 발생하면 토토 핫 관리자(에 의해 호출됨) 실행자) 전역 구조 TriggerData를 초기화합니다. *CurrentTriggerData(아래 설명) 및 토토 핫 호출 이벤트를 처리하는 함수입니다.
토토 핫 기능은 토토 핫가 실행되기 전에 생성되어야 합니다. 인수를 사용하지 않고 불투명하게 반환하는 함수로 생성되었습니다.
토토 핫를 생성하는 구문은 다음과 같습니다:
토토 핫 생성토토 핫[ 이전 | 이후 ] [ 삽입 | 삭제 | 업데이트 [ 또는 ... ] ]
켜짐관계각 [ 행 | 성명 ]
실행 절차절차
(인수);
인수는 다음과 같습니다:토토 핫 이름은 삭제해야 하는 경우에 사용됩니다 방아쇠. 이는에 대한 인수로 사용됩니다.드롭 토토 핫명령.
함수가 호출되기 전 또는 후에 호출되는지 결정합니다 이벤트.
명령의 다음 요소는 어떤 이벤트를 결정합니다. 기능을 실행하게 됩니다. 여러 이벤트를 지정할 수 있습니다. OR로 구분됩니다.
관계 이름은 이벤트가 적용되는 테이블을 결정합니다 에.
FOR EACH 절은 토토 핫 실행 여부를 결정합니다. 영향을 받은 각 행에 대해 또는 전체 문 앞(또는 뒤)에 대해 완료되었습니다.
프로시저 이름은 호출된 C 함수입니다.
다음의 함수에 전달된 인수는 CurrentTriggerData 구조. 인수 전달의 목적 이 기능은 유사한 다른 토토 핫를 허용하는 것입니다. 동일한 함수를 호출하기 위한 요구사항입니다.
또한,절차사용될 수 있습니다 다양한 관계를 토토 핫하기 위해(이러한 함수의 이름은 "일반 토토 핫 기능"으로).
위의 두 기능을 모두 사용하는 예로서 다음이 있을 수 있습니다. 두 개의 필드 이름을 인수로 사용하는 일반 함수 현재 사용자를 하나에 넣고 현재 타임스탬프를 다른 하나. 이를 통해 INSERT 이벤트에 토토 핫를 쓸 수 있습니다. 거래에서 기록 생성을 자동으로 추적하기 위해 예를 들어 테이블. "최종 업데이트"로도 사용할 수 있습니다. UPDATE 이벤트에 사용되는 경우 함수입니다.
토토 핫 함수는 호출 실행자에게 HeapTuple을 반환합니다. 이 INSERT, DELETE 또는 UPDATE 이후에 실행되는 토토 핫에 대해서는 무시됩니다. 작업을 수행하지만 BEFORE 토토 핫는 다음을 수행할 수 있습니다.
현재 튜플에 대한 작업을 건너뛰려면 NULL을 반환합니다(그리고 따라서 튜플은 삽입/업데이트/삭제되지 않습니다.
다른 튜플에 대한 포인터 반환(INSERT 및 UPDATE만 해당) 삽입될 것입니다(업데이트된 튜플의 새 버전으로) 업데이트된 경우) 원래 튜플 대신.
CREATE에 의해 수행된 초기화가 없다는 점에 유의하십시오. TRIGGER 핸들러. 이는 향후 변경될 예정입니다. 또한, 그 이상이라면 동일한 이벤트에 대해 둘 이상의 토토 핫가 정의되어 있습니다. 관계상, 방아쇠 발사 순서는 예측할 수 없습니다. 이는 다음과 같습니다. 앞으로는 바뀔 것입니다.
토토 핫 함수가 SQL 쿼리를 실행하는 경우(SPI 사용) 이러한 쿼리는 토토 핫를 다시 실행할 수 있습니다. 이것을 캐스케이딩이라고 합니다. 토토 핫. 캐스케이드 수에는 명시적인 제한이 없습니다. 수준.
INSERT에 의해 토토 핫가 실행되고 새 튜플을 동일한 관계이면 이 토토 핫가 다시 실행됩니다. 현재, 이러한 경우의 동기화 등을 위해 제공된 것이 없습니다. 하지만 이는 바뀔 수도 있습니다. 현재 funny_dup17() 함수가 있습니다. 재귀를 중지하기 위해 몇 가지 기술을 사용하는 회귀 테스트에서 (계단식) 자체적으로...