Postgresql 9.2.24 문서 | ||||
---|---|---|---|---|
토토 꽁 머니 : 문서 : 9.2 : 데이터 변경의 가시성 | up | 제 36 장. 배트맨 토토 | PostgreSQL : 문서 : 9.2 : 완전한 토토 커뮤니티 예 |
이 섹션에서는 인터페이스의 낮은 수준 세부 사항에 대해 설명합니다 배트맨 토토 함수에. 이 정보는 때만 필요합니다 C에서 배트맨 토토 함수 작성 언어는 이러한 세부 사항이 처리됩니다. 대부분의 경우 글을 쓰기 전에 절차 언어를 사용하는 것을 고려해야합니다 C.의 배트맨 토토는 각 절차 언어의 문서화 그 언어로 방아쇠를 쓰는 방법을 설명합니다.
배트맨 토토 함수는를 사용해야합니다."버전 1 "기능 관리자 인터페이스.
배트맨 토토 관리자가 함수를 호출하면 정상적인 주장을 통과했지만 통과됩니다"컨텍스트"포인터를 가리키는 포인터TriggerData구조. C 함수는 확인할 수 있습니다 그들이 배트맨 토토 매니저로부터 부름을 받았는지 여부 매크로 실행 :
pall_as_trigger (fcinfo)
((fcinfo)- context! = null && isa ((fcinfo)- context, triggerdata)
이것이 사실이 반환되면 캐스트하는 것이 안전합니다fcinfo- 컨텍스트to typeTriggerData *TriggerData구조. 기능 해야 하다not변경TriggerData구조 또는 그것은 그것을 가리킨다.
StrugerData명령/trigger.h:
typedef strugdata nodetag 유형; triggerevent tg_event; 관계 tg_relation; heappuple tg_trigtuple; heappuple tg_newtuple; 배트맨 토토 *tg_trigger; 버퍼 TG_TRIGTUPLEBUF; 버퍼 TG_NEWTUPLEBUF; triggerData;
회원이 다음과 같이 정의되는 곳 :
항상t_triggerData.
함수가 호출되는 이벤트를 설명합니다. 다음 매크로를 사용하여 검사 할 수 있습니다tg_event:
배트맨 토토가 발사되면 TRUE를 반환합니다 작업.
배트맨 토토가 발사 된 경우 true를 반환합니다 작업.
배트맨 토토 대신 발사 된 경우 true를 반환합니다 작업.
배트맨 토토가 행 레벨에 대해 발사 된 경우 true를 반환합니다 이벤트.
배트맨 토토가 발사 된 경우 TRUE를 반환합니다 성명서 수준 이벤트.
배트맨 토토가 해고 된 경우 true를 반환합니다삽입명령.
배트맨 토토가 해고 된 경우 true를 반환합니다업데이트명령.
배트맨 토토가 a에 해고 된 경우 true를 반환합니다.삭제명령.
배트맨 토토가 a에 해고 된 경우 true를 반환합니다.Truncate명령.
관계를 설명하는 구조에 대한 포인터 방아쇠가 발사되었습니다. 보기utils/rel.h이에 대한 자세한 내용 구조. 가장 흥미로운 것은입니다.tg_relation- rd_att(설명 자의 설명 자 관계 튜플) 및tg_relation- rd_rel- relname(관계 이름; 유형은char*그러나pamedata; 사용spi_getrelname (tg_relation)achar*사본이 필요한 경우 이름).
배트맨 토토가 발사 된 행에 대한 포인터. 이것은 삽입, 업데이트 또는 삭제되는 행입니다. 만약에 이 방아쇠는에 해고되었습니다.삽입또는삭제그런 다음 기능에서 반환 해야하는 것입니다. 당신은 행을 다른 행으로 교체하고 싶지 않습니다 ( 의 사례삽입) 또는 건너 뛰십시오 작업.
배트맨 토토 인 경우 행의 새 버전에 대한 포인터 에 해고당했습니다.업데이트및NULL삽입또는 A삭제. 이것은 당신이 함수에서 반환 해야하는 것입니다. 이벤트는업데이트그리고 당신은 그렇지 않습니다 이 행으로 다른 행으로 교체하거나 작업.
유형 구조에 대한 포인터배트맨 토토, 정의utils/reltrigger.h:
typedef 구조 배트맨 토토 oid tgoid; char *tgname; OID tgfoid; int16 tgtype; 문자; bool tgisinternal; Oid tgconstrelid; Oid tgconstrindid; Oid tgconstraint; bool tgdeferrable; bool tginitdeferred; int16 tgnargs; int16 tgnattr; int16 *tgattr; char ** tgargs; char *tgqual; 방아쇠;
여기서tgnameis 배트맨 토토 이름,tgnargsis 의 논쟁 수tgargs, 그리고tgargs는 배열입니다 에 명시된 인수에 대한 포인터배트맨 토토 만들기진술. 다른 회원 내부 사용만을위한 것입니다.
버퍼를 포함하는tg_trigtuple또는invalidbuffer튜플이없는 경우 디스크 버퍼에 저장되지 않습니다.
버퍼를 포함하는tg_newtuple또는invalidbuffer튜플이없는 경우 디스크 버퍼에 저장되지 않습니다.
배트맨 토토 함수는 a를 반환해야합니다.Heappuple포인터 또는 ANULL포인터 (notSQL NULL 값, 즉 그렇습니다 설정되지 않음isnulltrue). 조심하십시오 반품tg_trigtuple또는tg_newtuple, 적절한 경우 작동중인 행을 수정하고 싶지 않습니다.