이 SPI 사용의 예는 가시성 규칙을 보여줍니다. SRC/Test/Regress/Regress.c 및 Contrib/Spi.
이것은 SPI 사용의 매우 간단한 예입니다. 절차 토토 사이트 순위는 첫 번째 논쟁에서 SQL-Query를 수락하고 두 번째는 spi_exec을 사용하여 쿼리를 실행하고 쿼리가 실행 된 튜플 수 :
#include "executor/spi.h"/ * 이것은 spi */로 작업하는 데 필요한 것입니다. int 토토 사이트 순위 (text *sql, int cnt); int 토토 사이트 순위 (text *sql, int cnt) char *쿼리; int ret; int proc; / * 주어진 텍스트 개체를 C 문자열로 변환 */ query = DatumgetCString (DirectFunctionCall1 (Textout, pointergetDatum (sql))); spi_connect (); ret = spi_exec (query, cnt); Proc = SPI_PROCESSED; /* * 이것이 선택되고 일부 튜플이 가져 오면 - * elog (통지)을 통해 튜플을 발신자에게 반환합니다. */ if (ret == spi_ok_select && spi_processed 0) tupledesc tupdesc = spi_tuptable- tupdesc; spitupletable *tuptable = spi_tuptable; Char Buf [8192]; int i, j; for (j = 0; j <Proc; j ++) 핵심 튜플 = tuptable- vals [j]; for (i = 1, buf [0] = 0; i <= tupdesc- natts; i ++) sprintf (buf + strlen (buf), " %s %s", spi_getValue (튜플, tupdesc, i), (i == tupdesc- natts)? "": "|"); elog (통지, "토토 사이트 순위 : %s", buf); spi_finish (); pfree (쿼리); 반환 (Proc);
이제 기능을 컴파일하고 만듭니다.
함수 생성 토토 사이트 순위 (text, int4)는 int4를 '... path_to_so'language 'c';로 반환합니다.
vac = select 토토 사이트 순위 ( '테이블 생성 a (x int4)', 0); 토토 사이트 순위 ----- 0 (1 줄) vac = 값에 삽입 (토토 사이트 순위 ( '값에 삽입 (0)', 0); 삽입 167631 1 vac = select 토토 사이트 순위 ( 'select * from a', 0); 통지 : 토토 사이트 순위 : 0 <<< 토토 사이트 순위에 의해 삽입되었습니다 통지 : 토토 사이트 순위 : 1 <<< 값 토토 사이트 순위에 의해 반환되고 상단 삽입에 의해 삽입 된 값 토토 사이트 순위 ----- 2 (1 줄) vac = select 토토 사이트 순위 ( 'a', 1에서 선택 x + 2에 삽입); 토토 사이트 순위 ----- 1 (1 줄) vac = select 토토 사이트 순위 ( 'select * from a', 10); 주목 : 토토 사이트 순위 : 0 주목 : 토토 사이트 순위 : 1 통지 : 토토 사이트 순위 : 2 <<< 0 + 2, 지정된대로 하나의 튜플 만 삽입 토토 사이트 순위 ----- 3 <<< 10은 최대 값 만, 3은 튜플의 진짜 #입니다. (1 줄) vac = a에서 삭제; 삭제 3 vac = 값에 삽입 (토토 사이트 순위 ( 'select * from a', 0) + 1); 삽입 167712 1 vac = select * from a; 엑스 - 1 <<< a (0) + 1의 튜플이 없습니다 (1 줄) vac = 값에 삽입 (토토 사이트 순위 ( 'select * from a', 0) + 1); 주목 : 토토 사이트 순위 : 0 삽입 167713 1 vac = select * from a; 엑스 - 1 2 <<< a + 1에 단일 튜플이있었습니다. (2 줄) - 데이터 변경 가시성 규칙을 보여줍니다. vac = select 토토 사이트 순위에 삽입 ( 'select * from a', 0) * x from a; 주목 : 토토 사이트 순위 : 1 주목 : 토토 사이트 순위 : 2 주목 : 토토 사이트 순위 : 1 주목 : 토토 사이트 순위 : 2 주목 : 토토 사이트 순위 : 2 0 2 삽입 vac = select * from a; 엑스 - 1 2 2 <<< 2 튜플 * 1 (첫 번째 튜플에서 x) 6 <<< 3 튜플 (2 + 1 방금 삽입) * 2 (x 제 2 튜플에서 x) (4 줄) ^^^^^^^^ 다른 호출에서 토토 사이트 순위 ()에 보이는 튜플