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 줄)