이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 37.3. C의 롤 토토 기능 작성버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

38.3. C의 트리거 기능 작성

이 섹션에서는 인터페이스의 트리거 범퍼카 토토에 대한 낮은 수준 세부 사항에 대해 설명합니다. 이 정보는 C에서 트리거 범퍼카 토토을 작성할 때만 필요합니다. 더 높은 수준의 언어를 사용하는 경우 이러한 세부 사항은 처리됩니다.

트리거 함수는를 사용해야합니다.버전 1범퍼카 토토 관리자 인터페이스.

트리거 관리자가 함수를 호출하면 정상적인 인수가 전달되지는 않지만 A 전달됩니다.Context포인터를 가리키는 포인터TriggerData구조. C 범퍼카 토토은 매크로를 실행하여 트리거 관리자로부터 호출되었는지 여부를 확인할 수 있습니다.

call_as_trigger (fcinfo)

로 확장되는 :

((fcinfo)-> context! = null && isa ((fcinfo)-> context, triggerdata)

이것이 사실이 반환되면 캐스트하는 것이 안전합니다fcinfo-> 컨텍스트to typeTriggerData *TriggerData구조. 함수는not변경TriggerData가 가리키는 데이터 또는 데이터 중 하나입니다.

StrugerData명령/trigger.h:

typedef strugdata

회원이 다음과 같이 정의되는 곳 :

type

항상t_triggerData.

tg_event

함수가 호출되는 이벤트를 설명합니다. 다음 매크로를 사용하여 검사 할 수 있습니다tg_event:

trigger_fired_before (tg_event)

수술 전에 트리거가 발사 된 경우 true를 반환합니다.

trigger_fired_after (tg_event)

수술 후 트리거가 발사 된 경우 true를 반환합니다.

trigger_fired_instead (tg_event)

작동 대신 트리거가 발사 된 경우 TRUE를 반환합니다.

trigger_fired_for_row (tg_event)

트리거가로드 레벨 이벤트에 해고 된 경우 true를 반환합니다.

trigger_fired_for_statement (tg_event)

진술 수준 이벤트에 대한 트리거가 발사 된 경우 True를 반환합니다.

trigger_fired_by_insert (tg_event)

트리거가 해고 된 경우 true를 반환합니다삽입명령.

trigger_fired_by_update (tg_event)

트리거가 해고 된 경우 true를 반환합니다업데이트명령.

trigger_fired_by_delete (tg_event)

트리거가 a에 해고 된 경우 true를 반환합니다.삭제명령.

trigger_fired_by_truncate (tg_event)

트리거가 a에 해고 된 경우 true를 반환합니다.Truncate명령.

tg_relation

트리거가 발사 된 관계를 설명하는 구조에 대한 포인터. 보기utils/rel.h이 구조에 대한 자세한 내용. 가장 흥미로운 것은입니다.tg_relation-> rd_att(관계 튜플의 설명 자) 및tg_relation-> rd_rel-> relname(관계 이름; 유형이 아님char*그러나paminata; 사용spi_getrelname (tg_relation)achar*이름의 사본이 필요한 경우).

tg_trigtuple

트리거가 발사 된 행을위한 포인터. 이것은 삽입, 업데이트 또는 삭제되는 행입니다.삽입또는삭제그런 다음 행을 다른 행으로 교체하지 않으려면 (의 경우이면 기능에서 반환해야합니다.삽입) 또는 작업을 건너 뛰십시오. 외국 테이블의 트리거의 경우, 본 명세서의 시스템 열 값은 지정되지 않습니다.

tg_newtuple

트리거가 AN을 위해 발사 된 경우 새 버전의 행에 대한 포인터업데이트NULL삽입또는 A삭제. 이벤트가 인 경우 범퍼카 토토에서 반환 해야하는 것입니다.업데이트그리고이 행을 다른 행으로 교체하거나 작업을 건너 뛰고 싶지 않습니다. 외국 테이블의 트리거의 경우, 본 명세서의 시스템 열 값은 지정되지 않습니다.

tg_trigger

유형 구조에 대한 포인터트리거, 정의utils/reltrigger.h:

typedef 구조 트리거

여기서tgnameTrigger의 이름입니다.tgnargs의 수는입니다.tgargstgargs|트리거 만들기진술. 다른 회원은 내부 사용만을위한 것입니다.

TG_TRIGSLOT

슬롯 포함tg_trigtuple또는 ANULL그러한 튜플이없는 경우 포인터.

TG_NEWSLOT

슬롯 포함tg_newtuple또는 ANULL그러한 튜플이없는 경우 포인터.

tg_oldtable

유형 구조에 대한 포인터tuplestorestatetg_relation또는 ANULL없는 경우 포인터오래된 테이블전환 관계.

tg_newtable

유형 구조에 대한 포인터tuplestorestatetg_relation또는 ANULL없는 경우 포인터New Table전환 관계.

SPI를 통해 전환 테이블을 참조하기 위해 쿼리를 발행 할 수 있도록 참조SPI_REGISTER_TRIGGER_DATA.

트리거 함수는 a를 반환해야합니다.heappuple포인터 또는 ANULL포인터 (notSQL NULL 값, 즉 설정하지 않습니다isnulltrue). 둘 중 하나를 조심하십시오tg_trigtuple또는tg_newtuple, 적절하게 작동중인 행을 수정하지 않으려면.