위에서 언급한 바와 같이 윈 토토에 의해 함수가 호출될 때 관리자, 구조 TriggerData *CurrentTriggerData는 NULL이 아니며 초기화되었습니다. 따라서 CurrentTriggerData를 확인하는 것이 좋습니다. 처음에는 NULL이고 가져온 직후에 NULL로 설정됩니다. 다른 곳에서 윈 토토 함수를 호출하는 것을 방지하기 위한 정보 윈 토토 관리자.
구조 TriggerData는 다음에 정의되어 있습니다. src/include/commands/trigger.h:
typedef 구조체 TriggerData
TriggerEvent tg_event;
관계 tg_relation;
힙튜플 tg_trigtuple;
힙튜플 tg_newtuple;
윈 토토 *tg_trigger;
TriggerData;
tg_event
함수가 호출되는 이벤트를 설명합니다. 당신은 사용할 수 있습니다
tg_event를 검사하려면 다음 매크로를 사용하세요.
TRIGGER_FIRED_BEFORE(event)는 윈 토토가 BEFORE 전에 실행된 경우 TRUE를 반환합니다.
TRIGGER_FIRED_AFTER(event)는 윈 토토가 이후에 실행되면 TRUE를 반환하고, 그렇지 않으면 TRUE를 반환합니다.
TRIGGER_FIRED_FOR_ROW(이벤트)는 윈 토토가 실행된 경우 TRUE를 반환합니다.
ROW 수준 이벤트
TRIGGER_FIRED_FOR_STATEMENT(이벤트)는 윈 토토가 실행된 경우 TRUE를 반환합니다.
STATEMENT 수준 이벤트.
TRIGGER_FIRED_BY_INSERT(event)는 INSERT에 의해 윈 토토가 실행되면 TRUE를 반환합니다.
TRIGGER_FIRED_BY_DELETE(event)는 DELETE에 의해 윈 토토가 실행되면 TRUE를 반환합니다.
TRIGGER_FIRED_BY_UPDATE(event)는 UPDATE에 의해 윈 토토가 실행되면 TRUE를 반환합니다.
tg_관계
윈 토토된 관계를 설명하는 구조에 대한 포인터입니다. 봐
이 구조에 대한 자세한 내용은 src/include/utils/rel.h를 참조하세요. 가장
관심 사항은 tg_relation-rd_att(관계 설명자)입니다.
튜플) 및 tg_relation-rd_rel-relname(관계 이름. 이것은 아닙니다.
char*이지만 NameData. char*를 얻으려면 SPI_getrelname(tg_relation)을 사용하십시오.
이름 사본이 필요합니다.)
tg_trigttuple
윈 토토가 실행되는 튜플에 대한 포인터입니다. 이것이 튜플이다
삽입(INSERT의 경우), 삭제(DELETE의 경우) 또는 업데이트(UPDATE의 경우) 중입니다.
INSERT/DELETE인 경우 다음과 같은 경우 Executor로 반환됩니다.
튜플을 다른 것으로 교체하거나(INSERT) 건너뛰고 싶지 않은 경우
운영.
tg_newtuple
UPDATE인 경우 튜플의 새 버전에 대한 포인터이고, 이것이인 경우 NULL입니다.
INSERT 또는 DELETE의 경우. 다음과 같은 경우 Executor로 반환해야 합니다.
업데이트하고 이 튜플을 다른 튜플로 바꾸거나 건너뛰고 싶지 않습니다.
작업.
tg_trigger
src/include/utils/rel.h에 정의된 Trigger 구조에 대한 포인터입니다.
typedef 구조체 윈 토토
char *tgname;
Oid tgfoid;
func_ptr tgfunc;
int16 tgtype;
int16 tgnars;
int16 tgattr[8];
char **tgargs;
방아쇠;
tgname은 윈 토토의 이름이고, tgnargs는 tgargs의 인수 수입니다.
tgargs는 CREATE에 지정된 인수에 대한 포인터 배열입니다.
TRIGGER 문. 다른 구성원은 내부 전용입니다.