39.3. C의 스포츠 토토 베트맨 기능 작성

이 섹션에서는 인터페이스의 스포츠 토토 베트맨 기능에 대한 낮은 수준 세부 사항에 대해 설명합니다. 이 정보는 C에서 스포츠 토토 베트맨 기능을 작성할 때만 필요합니다. 더 높은 수준의 언어를 사용하는 경우 이러한 세부 사항은 처리됩니다. 대부분의 경우 스포츠 토토 베트맨를 작성하기 전에 절차 적 언어 사용을 고려해야합니다. 각 절차 언어의 문서는 해당 언어로 스포츠 토토 베트맨를 작성하는 방법을 설명합니다..

스포츠 토토 베트맨 함수는를 사용해야합니다.버전 1기능 관리자 인터페이스.

스포츠 토토 베트맨 관리자가 함수를 호출하면 일반적인 인수가 전달되지는 않지만 A 전달됩니다.컨텍스트포인터를 가리키는 포인터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;
    tupletableslot *tg_trigslot;
    tupletableslot *tg_newslot;
    tuplestorestate *tg_oldtable;
    tuplestorestate *tg_newtable;
    const bitmapset *tg_updatedcols;
 triggerData;

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

타입

항상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*그러나pamedata; 사용spi_getrelname (tg_relation)achar*이름의 사본이 필요한 경우).

tg_trigtuple

스포츠 토토 베트맨가 발사 된 행을위한 포인터. 이것은 삽입, 업데이트 또는 삭제되는 행입니다. 이 방아쇠가 해고 된 경우삽입또는삭제그런 다음 행을 다른 행으로 바꾸고 싶지 않다면 (의 경우.삽입) 또는 작업을 건너 뛰십시오. 외국 테이블의 트리거의 경우, 본 명세서의 시스템 열 값은 지정되지 않습니다.

tg_newtuple

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

tg_trigger

유형 구조에 대한 포인터스포츠 토토 베트맨, 정의utils/reltrigger.h:

typedef 구조 스포츠 토토 베트맨

    oid tgoid;
    char *tgname;
    OID tgfoid;
    int16 tgtype;
    문자;
    bool tgisinternal;
    bool tgisclone;
    Oid tgconstrelid;
    Oid tgconstrindid;
    Oid tgconstraint;
    bool tgdeferrable;
    bool tginitdeferred;
    int16 tgnargs;
    int16 tgnattr;
    int16 *tgattr;
    char ** tgargs;
    char *tgqual;
    char *tgoldtable;
    char *tgnewtable;
 방아쇠;

여기서tgname스포츠 토토 베트맨 이름입니다.tgnargs의 수는입니다.tgargstgargs|스포츠 토토 베트맨 만들기진술. 다른 회원은 내부 사용만을위한 것입니다.

TG_TRIGSLOT

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

TG_NEWSLOT

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

tg_oldtable

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

tg_newtable

유형 구조에 대한 포인터tuplestorestate|tg_relation또는 aNULL없는 경우 포인터New Table전환 관계.

TG_UPDATEDCOLS

for업데이트triggers, a bitmap set indicating the columns that were updated by the triggering command. Generic trigger functions can use this to optimize actions by not having to deal with columns that were not changed.

예를 들어, 속성 번호가있는 열이 있는지 확인하려면attnum(1 기반)은이 비트 맵 세트의 구성원입니다.bms_is_member (Attnum -FirstLowinValidHeapattripiteNumber, trigdata- tg_updatedCols).

이외의 스포츠 토토 베트맨 용업데이트스포츠 토토 베트맨, 이것은입니다.NULL.

SPI를 통해 전환 테이블을 참조하기 위해 쿼리를 발행 할 수 있도록 참조postgresql : 문서 : 15 : 토토.

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

정정 제출

올바른 문서에 아무것도 표시되면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면