이 섹션에는 SPI 사용의 매우 간단한 예가 포함되어 있습니다. C 함수토토 핫
SQL 명령을 첫 번째 인수로 사용하고 행을 두 번째로 계산하고를 사용하여 명령을 실행합니다.SPI_EXEC
명령에 의해 처리 된 행 수를 반환합니다. 소스 트리에서 SPI에 대한 더 복잡한 예제를 찾을 수 있습니다SRC/TEST/Regress/Regress.C
and the사설 토토 : 문서 : 13 : F.36. SPI모듈.
#include "postgres.h" #include "Executor/Spi.h" #include "utils/buildins.h" PG_MODULE_MAGIC; pg_function_info_v1 (토토 핫); 자료 토토 핫 (pg_function_args) char *명령; int cnt; int ret; UINT64 Proc; / * 주어진 텍스트 개체를 C 문자열로 변환 */ 명령 = text_to_cstring (pg_getarg_text_pp (0)); cnt = pg_getarg_int32 (1); spi_connect (); ret = spi_exec (command, cnt); Proc = SPI_PROCESSED; /* * 일부 행을 가져 오면 elog (정보)을 통해 인쇄하십시오. */ if (ret 0 && spi_tuptable! = null) spitupletable *tuptable = spi_tuptable; tupledesc tupdesc = tuptable- tupdesc; Char Buf [8192]; UINT64 J; for (j = 0; j <tuptable- numvals; j ++) 핵심 튜플 = tuptable- vals [j]; int i; for (i = 1, buf [0] = 0; i <= tupdesc- natts; i ++) snprintf (buf + strlen (buf), sizeof (buf) - strlen (buf), " %s %s", spi_getValue (튜플, tupdesc, i), (i == tupdesc- natts)? "": "|"); elog (정보, "토토 핫 : %s", buf); spi_finish (); pfree (명령); pg_return_int64 (Proc);
이것은 기능을 공유 라이브러리로 컴파일 한 후 기능을 선언하는 방법입니다 (세부 사항은섹션 37.10.5.) :
함수 생성 토토 핫 (텍스트, 정수) int8을 반환합니다
처럼 'filename
'
언어 C 엄격한;
샘플 세션은 다음과 같습니다.
= 토토 핫 ( '테이블 생성 a (x integer)', 0); 토토 핫 ------- 0 (1 줄) = 값에 삽입 (토토 핫 ( '값에 삽입 (0)', 0); 삽입 0 1 = select 토토 핫 ( 'select * from a', 0); 정보 : execQ : 0- 토토 핫에 의해 삽입info : 토토 핫 : 1- 토토 핫에 의해 반환되고 상단 삽입물에 의해 삽입토토 핫 ------- 2 (1 줄) = select 토토 핫 ( '반환 *'에서 선택 x + 2에 삽입, 1); 정보 : execQ : 2- 0 + 2, 실행은 count에 의해 중지되었습니다토토 핫 ------- 1 (1 줄) = select 토토 핫 ( 'select * from a', 10); 정보 : 토토 핫 : 0 정보 : execQ : 1 정보 : execQ : 2 토토 핫 ------- 3- 10은 최대 값 만, 3은 실수 행 수입니다(1 행) = select 토토 핫 ( 'a', 1에서 선택 x + 10에 삽입); 토토 핫 ------- 3- 처리 된 모든 행; 카운트는 그것을 멈추지 않습니다. 아무것도 반환되지 않기 때문에(1 행) = 선택 *에서; 엑스 ---- 0 1 2 10 11 12 (6 줄) = a에서 삭제; 삭제 6 = 값에 삽입 (토토 핫 ( 'select * from a', 0) + 1); 삽입 0 1 = 선택 *에서; 엑스 --- 1- 0 (a의 행 없음) + 1(1 행) = 값에 삽입 (토토 핫 ( 'select * from a', 0) + 1); 정보 : execQ : 1 삽입 0 1 = 선택 *에서; 엑스 --- 1 2- 1 (a에 한 줄이있었습니다) + 1(2 줄)- 데이터 변경 가시성 규칙을 보여줍니다. - 토토 핫는 두 번 호출되고 매번 다른 행의 행을 볼 수 있습니다 := select 토토 핫에 삽입 ( 'select * from a', 0) * x from a; 정보 : execQ : 1- 첫 번째 토토 핫의 결과정보 : 토토 핫 : 2 정보 : execQ : 1- Second 토토 핫의 결과정보 : 토토 핫 : 2 정보 : execQ : 2 0 2 삽입 = 선택 *에서; 엑스 --- 1 2 2- 2 줄 * 1 (첫 번째 행에서 x) 6 - 3 행 (2 + 1 방금 삽입) * 2 (x in 2 줄)(4 줄)
올바르지 않은 문서에 아무것도 표시되면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면