이 섹션에서는 인터페이스의 하위 수준 세부정보를 설명합니다. 배트맨 토토 기능으로. 이 정보는 다음 경우에만 필요합니다. C로 배트맨 토토 함수를 작성합니다. 더 높은 수준의 함수 언어를 사용하면 이러한 세부정보가 자동으로 처리됩니다.
참고:여기에 설명된 인터페이스는 다음에 적용됩니다.포스트그레SQL7.1 이상. 이전 버전에서는 전역에서 TriggerData 포인터를 전달했습니다. 변수 CurrentTriggerData.
배트맨 토토 관리자가 함수를 호출하면 함수가 호출되지 않습니다. 일반 매개변수를 전달했지만, a가 전달되었습니다."컨텍스트"TriggerData를 가리키는 포인터 구조. C 함수는 자신이 호출되었는지 여부를 확인할 수 있습니다. 매크로를 실행하여 배트맨 토토 관리자 여부CALLED_AS_TRIGGER(fcinfo), 다음으로 확장됨
((fcinfo)-컨텍스트 != NULL && IsA((fcinfo)-컨텍스트, TriggerData))
이것이 TRUE를 반환하면 캐스팅하는 것이 안전합니다. fcinfo-컨텍스트를 입력합니다배트맨 토토데이터 *그리고 가리키는 TriggerData 구조를 활용하세요. 는 기능은 반드시아님변경 TriggerData 구조 또는 그것이 가리키는 데이터.
구조 TriggerData는 다음에 정의되어 있습니다. src/include/commands/trigger.h:
typedef 구조체 TriggerData
NodeTag 유형;
TriggerEvent tg_event;
관계 tg_relation;
힙튜플 tg_trigtuple;
힙튜플 tg_newtuple;
배트맨 토토 *tg_trigger;
TriggerData;
여기서 구성원은 다음과 같이 정의됩니다:
항상T_TriggerData만약 이것이라면 배트맨 토토 이벤트입니다.
함수가 호출되는 이벤트를 설명합니다. 다음 매크로를 사용하여 조사할 수 있습니다.tg_event:
이전에 배트맨 토토가 실행되면 TRUE를 반환합니다.
이후에 배트맨 토토가 실행되면 TRUE를 반환합니다.
ROW 수준에 대해 배트맨 토토가 실행되면 TRUE를 반환합니다. 이벤트.
STATEMENT 수준에 대해 배트맨 토토가 실행되면 TRUE를 반환합니다. 이벤트.
INSERT에 의해 배트맨 토토가 실행되면 TRUE를 반환합니다.
DELETE에 의해 배트맨 토토가 실행되면 TRUE를 반환합니다.
업데이트에 의해 배트맨 토토가 실행되면 TRUE를 반환합니다.
은 배트맨 토토된 구조를 설명하는 구조에 대한 포인터입니다. 관계. 자세한 내용은 src/include/utils/rel.h를 참조하세요. 이 구조. 가장 흥미로운 점은 tg_relation-rd_att (관계 튜플의 설명자) 및 tg_relation-rd_rel-relname(관계 이름. 이것은 char*가 아니라 NameData입니다. 사용 복사본이 필요한 경우 char*를 가져오는 SPI_getrelname(tg_relation) 이름).
은 배트맨 토토가 실행되는 튜플에 대한 포인터입니다. 해고되었습니다. 이는 삽입되는 튜플입니다(INSERT인 경우). 삭제(DELETE인 경우) 또는 업데이트(UPDATE인 경우)됩니다. 만약에 INSERT/DELETE 다음으로 돌아갑니다. 튜플을 다른 튜플로 교체하고 싶지 않은 경우 실행자 하나(INSERT) 또는 작업을 건너뜁니다.
업데이트된 경우 새 버전의 튜플에 대한 포인터입니다. INSERT 또는 DELETE의 경우 NULL입니다. 이것이 바로 당신이 업데이트를 원하지 않는 경우 Executor로 돌아가야 합니다. 이 튜플을 다른 것으로 바꾸거나 건너뛰세요. 작동합니다.
은 다음에 정의된 Trigger 구조에 대한 포인터입니다. src/include/utils/rel.h:
typedef 구조체 배트맨 토토
이드 tgoid;
char *tgname;
Oid tgfoid;
int16 tgtype;
bool tg활성화됨;
bool tgisconstraint;
bool tgdeferrable;
bool tginitdeferred;
int16 tgnars;
int16 tgattr[FUNC_MAX_ARGS];
char **tgargs;
배트맨 토토;
여기서 tgname은 배트맨 토토 이름이고, tgnargs는 배트맨 토토 수입니다. tgargs의 인수, tgargs는 tgargs에 대한 포인터 배열입니다. CREATE TRIGGER 문에 지정된 인수입니다. 기타 회원은 내부 전용입니다.