토토 사이트 추천 | ||
---|---|---|
이전 | 제 38 장. 트리거 | 다음 |
위에서 언급했듯이 트리거가 함수를 호출 할 때 구조 TriggerData *CurrentTriggerData가 NULL이 아닙니다 초기화. 따라서 CurrentTriggerData를 확인하는 것이 좋습니다 처음에는 null이고 트리거 기능에 대한 호출을 방지하기위한 정보는 방아쇠 관리자.
struct triggerdata가 정의되어 있습니다 src/include/commands/trigger.h :
typedef strugdatigdata triggerevent tg_event; 관계 tg_relation; heappuple tg_trigtuple; heappuple tg_newtuple; 트리거 *tg_trigger; triggerData;
tg_event 함수가 호출되는 이벤트를 설명합니다. 당신은 그것을 사용할 수 있습니다 tg_event를 검사하기 위해 매크로를 따라 : trigger_fired_before (이벤트) 이전에 트리거가 발사되면 true를 반환합니다. Trigger_Fired_After (이벤트)는 트리거가 발사되면 TRUE를 반환합니다. trigger_fired_for_row (이벤트) 트리거가 발사되면 true를 반환합니다 로우 레벨 이벤트; 트리거 _fired_for_statement (이벤트) 트리거가 발사 된 경우 true를 반환합니다 성명서 수준 이벤트; trigger_fired_by_insert (event)는 삽입으로 트리거가 발사되면 true를 반환합니다. trigger_fired_by_delete (event)는 trigger에 의해 발사 된 경우 true를 반환합니다. trigger_fired_by_update (이벤트)는 업데이트로 트리거가 발사되면 true를 반환합니다. tg_relation 트리거 된 관계를 설명하는 구조에 대한 포인터입니다. 봐 이 구조에 대한 자세한 내용은 src/include/utils/rel.h. 가장 관심있는 것은 tg_relation- rd_att입니다 (관계의 설명 자 튜플) 및 tg_relation- rd_rel- relname (관계의 이름. 이것은 아닙니다 char*, 그러나 지명 된타. spi_getrelname (tg_relation)을 사용하여 char* if를 얻습니다 이름 사본이 필요합니다). tg_trigtuple 트리거가 발사되는 튜플에 대한 포인터입니다. 이것은 튜플입니다 삽입 (삽입 된 경우), 삭제 (삭제 된 경우) 또는 업데이트 (업데이트). 삽입/삭제되면 이것이 귀하가 집행자에게 돌아 오는 것입니다. 튜플을 다른 하나 (삽입)로 바꾸거나 건너 뛰는 것을 원하지 않습니다. 작업. tg_newtuple 업데이트되고 Null이면 새 버전의 튜플에 대한 포인터입니다. 인서트 또는 삭제. 이것은 당신이 집행자에게 돌아 오는 것입니다. 업데이트하면이 튜플을 다른 튜플로 교체하거나 건너 뛰고 싶지 않습니다. 작전. tg_trigger src/include/utils/rel.h에 정의 된 구조 트리거에 대한 포인터입니다. typedef 구조 트리거 char *tgname; OID tgfoid; func_ptr tgfunc; int16 tgtype; int16 tgnargs; int16 tgattr [8]; char ** tgargs; 방아쇠; tgname은 방아쇠의 이름이며, tgnargs는 tgargs의 논증 수입니다. tgargs는 생성에 명시된 인수에 대한 다양한 포인터입니다. 트리거 진술. 다른 회원은 내부 사용만을위한 것입니다.
이전 | 홈 | 다음 |
트리거 | up | 데이터 가시성 변화 |