위에서 언급했듯이 토토 베이에 의해 함수가 호출될 때 관리자, 구조 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 문. 다른 구성원은 내부 전용입니다.