더 복잡한 예가 있습니다.SRC/TEST/Regress/Regress.Cand inContrib/SPI.
트리거 사용의 매우 간단한 예는 다음과 같습니다. 기능trigf
튜플 수를보고합니다
트리거 된 관계에서토토 사이트 순위및
쿼리가 널 값을 삽입하려는 경우 작업을 건너 뜁니다.
X로 (즉, 널없는 제약 조건으로 작용하지만 중단하지 않습니다.
거래).
#include "executor/spi.h"/ * 이것은 spi */로 작업하는 데 필요한 것입니다. #include "명령/trigger.h"/ * - " - 트리거 */ 외부 Datum trigf (pg_function_args); pg_function_info_v1 (trigf); 자료 trigf (pg_function_args) triggerData *trigdata = (triggerData *) fcinfo- 컨텍스트; tupledesc tupdesc; heppuple rettuple; char *언제; bool checknull = false; bool isnull; int ret, i; / * trigdata가 내가 기대하는 것을 가리키고 있는지 확인하십시오 */ if (! calling_as_trigger (fcinfo)) elog (오류, "Trigf : 트리거 관리자에 의해 발사되지 않음"); / * 유령으로 돌아갈 튜플 */ if (trigger_fired_by_update (trigdata- tg_event)) rettuple = trigdata- tg_newtuple; 또 다른 rettuple = trigdata- tg_trigtuple; / * 널 값 확인 */ if (! trigger_fired_by_delete (trigdata- tg_event) && trigger_fired_before (trigdata- tg_event))) Checknull = true; if (trigger_fired_before (trigdata- tg_event)) 언제 = "전"; 또 다른 언제 = "후"; tupdesc = trigdata- tg_relation- rd_att; / * SPI 관리자에게 연결 */ if ((ret = spi_connect ()) <0) elog (info, "trigf (fired %s) : spi_connect가 반환 된 %d", 언제, ret); / * 관련 튜플 수를 얻으십시오 */ ret = spi_exec ( "토토 사이트 순위에서 count (*) 선택", 0); if (ret <0) elog (통지, "trigf (fired %s) : spi_exec이 %d를 반환 할 때, ret); /*count (*) Pg 7.2에서 int8을 반환하므로 변환에주의하십시오*/ i = (int) datumgetint64 (spi_getbinval (spi_tuptable- vals [0], spi_tuptable- tupdesc, 1, & isnull); elog (통지, "trigf (발사 %s) : 토토 사이트 순위에는 %d 튜플이 있습니다", 언제, i); spi_finish (); if (checknull) (void) spi_getbinval (rettuple, tupdesc, 1, & isnull); if (isnull) rettuple = null; 반환 pointergetDatum (rettuple);
이제 트리거 함수를 컴파일하고 만듭니다.
함수 만들기 trigf () 트리거를 반환합니다 '... path_to_so'언어 C; 테스트 생성 (x int4);
vac = 토토 사이트 순위에서 삽입 또는 업데이트 또는 삭제하기 전에 tbe 전에 트리거 생성 각 행에 대해 절차를 실행합니다. Trigf (); 만들다 vac = 토토 사이트 순위에서 삽입 또는 업데이트 또는 삭제 후 Trigger Tafter 작성 각 행에 대해 절차를 실행합니다. Trigf (); 만들다 Vac = 토토 사이트 순위 값 (null)에 삽입; 경고 : trigf (이전에 발사) : 토토 사이트 순위에는 0 개의 튜플이 있습니다. 0 0을 삽입하십시오 - 삽입을 건너 뛰고 트리거가 발사되지 않았습니다 vac = 토토 사이트 순위에서 선택 *; 엑스 --- (0 줄) Vac = 토토 사이트 순위 값에 삽입 (1); 정보 : trigf (이전에 발사) : 토토 사이트 순위에 0 개의 튜플이 있습니다. 정보 : trigf (후 발사) : 토토 사이트 순위에는 1 개의 튜플이 있습니다. ^^^^^^^^ 가시성에 대해 우리가 말한 것을 기억하십시오. 삽입 167793 1 vac = 토토 사이트 순위에서 선택 *; 엑스 --- 1 (1 줄) vac = 토토 사이트 순위에 삽입하여 토토 사이트 순위에서 x * 2를 선택하십시오. 정보 : trigf (이전에 발사) : 토토 사이트 순위에 1 개의 튜플이 있습니다. 정보 : trigf (후 발사) : 토토 사이트 순위에는 2 개의 튜플이 있습니다. ^^^^^^^^ 가시성에 대해 우리가 말한 것을 기억하십시오. 삽입 167794 1 vac = 토토 사이트 순위에서 선택 *; 엑스 --- 1 2 (2 줄) Vac = 업데이트 토토 사이트 순위 set x = null 여기서 x = 2; 정보 : trigf (이전에 발사) : 토토 사이트 순위에 2 개의 튜플이 있습니다. 업데이트 0 Vac = 업데이트 토토 사이트 순위 set x = 4 여기서 x = 2; 정보 : trigf (이전에 발사) : 토토 사이트 순위에 2 개의 튜플이 있습니다. 정보 : trigf (후 발사) : 토토 사이트 순위에는 2 개의 튜플이 있습니다. 업데이트 1 vac = 토토 사이트 순위에서 선택 *; 엑스 --- 1 4 (2 줄) vac = 토토 사이트 순위에서 삭제; 정보 : trigf (이전에 발사) : 토토 사이트 순위에 2 개의 튜플이 있습니다. 정보 : trigf (후 발사) : 토토 사이트 순위에는 1 개의 튜플이 있습니다. 정보 : trigf (이전에 발사) : 토토 사이트 순위에 1 개의 튜플이 있습니다. 정보 : trigf (이후에 발사) : 토토 사이트 순위에는 0 개의 튜플이 있습니다. ^^^^^^^^ 가시성에 대해 우리가 말한 것을 기억하십시오. 삭제 2 vac = 토토 사이트 순위에서 선택 *; 엑스 --- (0 줄)
이전 | 홈 | PostgreSQL : 문서 : 7.3 : 서버 프로그래밍 무지개 토토 |
데이터 가시성 변화 | up | 서버 프로그래밍 인터페이스 |