이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

20.2. 배트맨 토토와의 상호작용 관리자

이 섹션에서는 인터페이스의 하위 수준 세부정보를 설명합니다. 배트맨 토토 기능으로. 이 정보는 다음 경우에만 필요합니다. C로 배트맨 토토 함수를 작성합니다. 더 높은 수준의 함수 언어를 사용하면 이러한 세부정보가 자동으로 처리됩니다.

참고:여기에 설명된 인터페이스는 다음에 적용됩니다.포스트그레SQL7.1 이상. 이전 버전에서는 전역에서 TriggerData 포인터를 전달했습니다. 변수 CurrentTriggerData.

배트맨 토토 관리자가 함수를 호출하면 함수가 호출되지 않습니다. 일반 매개변수를 전달했지만, a가 전달되었습니다."컨텍스트"TriggerData를 가리키는 포인터 구조. C 함수는 자신이 호출되었는지 여부를 확인할 수 있습니다. 매크로를 실행하여 배트맨 토토 관리자 여부CALLED_AS_TRIGGER(fcinfo), 다음으로 확장됨

((fcinfo)-컨텍스트 != NULL && IsA((fcinfo)-컨텍스트, TriggerData))

이것이 TRUE를 반환하면 캐스팅하는 것이 안전합니다. fcinfo-컨텍스트를 입력합니다배트맨 토토데이터 *그리고 가리키는 TriggerData 구조를 활용하세요. 는 기능은 반드시아님변경 TriggerData 구조 또는 그것이 가리키는 데이터.

구조 TriggerData는 다음에 정의되어 있습니다. src/include/commands/trigger.h:

typedef 구조체 TriggerData

    NodeTag 유형;
    TriggerEvent tg_event;
    관계 tg_relation;
    힙튜플 tg_trigtuple;
    힙튜플 tg_newtuple;
    배트맨 토토 *tg_trigger;
 TriggerData;

여기서 구성원은 다음과 같이 정의됩니다:

유형

항상T_TriggerData만약 이것이라면 배트맨 토토 이벤트입니다.

tg_event

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

TRIGGER_FIRED_BEFORE(tg_event)

이전에 배트맨 토토가 실행되면 TRUE를 반환합니다.

TRIGGER_FIRED_AFTER(tg_event)

이후에 배트맨 토토가 실행되면 TRUE를 반환합니다.

TRIGGER_FIRED_FOR_ROW(이벤트)

ROW 수준에 대해 배트맨 토토가 실행되면 TRUE를 반환합니다. 이벤트.

TRIGGER_FIRED_FOR_STATEMENT(이벤트)

STATEMENT 수준에 대해 배트맨 토토가 실행되면 TRUE를 반환합니다. 이벤트.

TRIGGER_FIRED_BY_INSERT(이벤트)

INSERT에 의해 배트맨 토토가 실행되면 TRUE를 반환합니다.

TRIGGER_FIRED_BY_DELETE(이벤트)

DELETE에 의해 배트맨 토토가 실행되면 TRUE를 반환합니다.

TRIGGER_FIRED_BY_UPDATE(이벤트)

업데이트에 의해 배트맨 토토가 실행되면 TRUE를 반환합니다.

tg_relation

은 배트맨 토토된 구조를 설명하는 구조에 대한 포인터입니다. 관계. 자세한 내용은 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 다음으로 돌아갑니다. 튜플을 다른 튜플로 교체하고 싶지 않은 경우 실행자 하나(INSERT) 또는 작업을 건너뜁니다.

tg_newtuple

업데이트된 경우 새 버전의 튜플에 대한 포인터입니다. INSERT 또는 DELETE의 경우 NULL입니다. 이것이 바로 당신이 업데이트를 원하지 않는 경우 Executor로 돌아가야 합니다. 이 튜플을 다른 것으로 바꾸거나 건너뛰세요. 작동합니다.

tg_trigger

은 다음에 정의된 Trigger 구조에 대한 포인터입니다. src/include/utils/rel.h:

typedef 구조체 배트맨 토토

    이드 tgoid;
    char *tgname;
    Oid tgfoid;
    int16 tgtype;
    bool tg활성화됨;
    bool tgisconstraint;
    bool tgdeferrable;
    bool tginitdeferred;
    int16 tgnars;
    int16 tgattr[FUNC_MAX_ARGS];
    char **tgargs;
 배트맨 토토;

여기서 tgname은 배트맨 토토 이름이고, tgnargs는 배트맨 토토 수입니다. tgargs의 인수, tgargs는 tgargs에 대한 포인터 배열입니다. CREATE TRIGGER 문에 지정된 인수입니다. 기타 회원은 내부 전용입니다.