이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

예제

SRC/Test/Regress/Regress.C에는 더 복잡한 예가 있습니다 그리고 Contrib/spi.

트리거 사용의 매우 간단한 예는 다음과 같습니다. 기능 trigf 트리거 된 관계 ttest의 튜플 수를보고합니다. 쿼리가 null을 x에 삽입하려고 시도하면 작업을 건너 뜁니다. (즉, 그것은 널 제약이 아닌 역할을하지만 거래).

#include "executor/spi.h"/ * 이것은 spi */로 작업하는 데 필요한 것입니다.
#include "명령/trigger.h"/ * - " - 트리거 */

heptuple trigf (void);

무거운
trigf ()

        tupledesc tupdesc;
        heppuple rettuple;
        char *언제;
        bool checknull = false;
        bool isnull;
        int ret, i;

        if (! currenttriggerData)
                elog (warn, "trigf : 트리거가 초기화되지 않음");

        / * 유령으로 돌아갈 튜플 */
        if (trigger_fired_by_update (currentTriggerData- tg_event))
                rettuple = currentTriggerData- tg_newtuple;
        또 다른
                rettuple = currentTriggerData- tg_trigtuple;

        /* 널 확인? */
        if (! trigger_fired_by_delete (currentTriggerData- tg_event) &&
                trigger_fired_before (currentTriggerData- tg_event))
                Checknull = true;

        if (trigger_fired_before (currentTriggerData- tg_event))
                언제 = "전";
        또 다른
                언제 = "후";

        tupdesc = currentTriggerData- tg_relation- rd_att;
        currentTriggerData = null;

        / * SPI 관리자에게 연결 */
        if ((ret = spi_connect ()) <0)
                elog (warn, "trigf (fired %s) : spi_connect는 %d", 언제, ret);

        / * 관련 튜플 수를 얻으십시오 */
        ret = spi_exec ( "스포츠 토토 베트맨에서 count (*) 선택", 0);

        if (ret <0)
                elog (warn, "trigf (fired %s) : spi_exec 반환 %d", 언제, ret);

        i = spi_getBinval (spi_tuptable- vals [0], spi_tuptable- tupdesc, 1, & isnull);

        elog (통지, "trigf (발사 %s) : 스포츠 토토 베트맨에는 %d 튜플이 있습니다", 언제, i);

        spi_finish ();

        if (checknull)

                i = spi_getbinval (rettuple, tupdesc, 1, & isnull);
                if (isnull)
                        rettuple = null;

        반환 (rettuple);

이제 테이블 스포츠 토토 베트맨 (x int4)를 컴파일하고 만듭니다. 기능을 만듭니다 trigf ()는 opaque를 '... path_to_so'language 'c'로 반환합니다.

vac = ttest에서 삽입 또는 업데이트 또는 삭제하기 전에 tbe 전에 트리거 생성 
각 행에 대해 절차를 실행합니다. Trigf ();
만들다
vac = ttest에서 삽입 또는 업데이트 또는 삭제 후 Trigger Tafter 작성 
각 행에 대해 절차를 실행합니다. Trigf ();
만들다
Vac = ttest 값 (null)에 삽입;
통지 : trigf (이전에 발사) : ttest에는 0 개의 튜플이 있습니다
0 0을 삽입하십시오

- 삽입을 건너 뛰고 트리거가 발사되지 않았습니다

vac = ttest에서 선택 *;
엑스
-
(0 줄)

Vac = ttest 값에 삽입 (1);
통지 : trigf (이전에 발사) : ttest에는 0 개의 튜플이 있습니다
통지 : trigf (후 발사) : ttest에는 1 개의 튜플이 있습니다.
                                       ^^^^^^^^
                             가시성에 대해 우리가 말한 것을 기억하십시오.
삽입 167793 1
vac = ttest에서 선택 *;
엑스
-
1
(1 줄)

vac = ttest에 삽입하여 ttest에서 x * 2를 선택하십시오.
통지 : trigf (이전에 발사) : ttest에는 1 개의 튜플이 있습니다
통지 : trigf (후 발사) : ttest에는 2 개의 튜플이 있습니다.
                                       ^^^^^^^^
                             가시성에 대해 우리가 말한 것을 기억하십시오.
삽입 167794 1
vac = ttest에서 선택 *;
엑스
-
1
2
(2 줄)

Vac = 업데이트 ttest set x = null 여기서 x = 2;
통지 : trigf (이전에 발사) : ttest에는 2 개의 튜플이 있습니다
업데이트 0
Vac = 업데이트 ttest set x = 4 여기서 x = 2;
통지 : trigf (이전에 발사) : ttest에는 2 개의 튜플이 있습니다
통지 : trigf (후 발사) : ttest에는 2 개의 튜플이 있습니다.
업데이트 1
vac = ttest에서 선택 *;
엑스
-
1
4
(2 줄)

vac = ttest에서 삭제;
통지 : trigf (이전에 발사) : ttest에는 2 개의 튜플이 있습니다
통지 : trigf (후 발사) : ttest에는 1 개의 튜플이 있습니다.
통지 : trigf (이전에 발사) : ttest에는 1 개의 튜플이 있습니다
통지 : trigf (후 발사) : ttest에는 0 개의 튜플이 있습니다.
                                       ^^^^^^^^
                             가시성에 대해 우리가 말한 것을 기억하십시오.
삭제 2
vac = ttest에서 선택 *;
엑스
-
(0 줄)