2025년 9월 25일:토토 커뮤니티 : 토토
이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.503 토토 핫 페치 실패버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.
포스트그레SQL
이전 39장. 서버 프로그래밍 인터페이스 다음

이 SPI 사용 예는 가시성 규칙을 보여줍니다. src/test/regress/regress.c에 더 복잡한 예가 있습니다. 그리고 contrib/spi에 있습니다.

이것은 SPI 사용법의 매우 간단한 예입니다. 프로시저 사설 토토 첫 번째 인수에 SQL 쿼리를 허용하고 해당 인수에 tcount를 허용합니다. 둘째, SPI_exec를 사용하여 쿼리를 실행하고 쿼리가 실행된 튜플:

#include "executor/spi.h" /* SPI로 작업하는 데 필요한 것입니다 */

int 사설 토토(text *sql, int cnt);

정수
사설 토토(텍스트 *sql, int cnt)

        int ret;
        int proc = 0;

        SPI_connect();

        ret = SPI_exec(textout(sql), cnt);

        proc = SPI_processed;
        /*
         * 이것이 SELECT이고 일부 튜플을 가져온 경우 -
         * elog(NOTICE)를 통해 호출자에게 튜플을 반환합니다.
         */
        if ( ret == SPI_OK_SELECT && SPI_processed  0 )

                TupleDesc tupdesc = SPI_tuptable-tupdesc;
                SPITupleTable *tuptable = SPI_tuptable;
                char buf[8192];
                나는 int;

                for(ret = 0; ret < proc; ret++)

                        HeapTuple 튜플 = tuptable-vals[ret];

                        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();

        반환(proc);

이제 함수를 컴파일하고 생성하십시오:

생성 함수 사설 토토(text, int4)는 int4를 '...path_to_so' 언어 'c'로 반환합니다.
vac= select 사설 토토('테이블 a 생성(x int4)', 0);
실행
-----
    0
(1줄)

vac= 값에 삽입 (사설 토토('값에 삽입 (0)',0));
삽입 167631 1
vac= select 사설 토토('select * from a',0);
공지:사설 토토: 0 <<< 사설 토토에 의해 삽입됨

NOTICE:사설 토토: 1 <<< 사설 토토에 의해 반환되고 상위 INSERT에 의해 삽입된 값

실행
-----
    2
(1줄)

vac= select 사설 토토('a에서 x + 2를 선택하여 삽입',1);
실행
-----
    1
(1줄)

vac= select 사설 토토('select * from a', 10);
공지사항:사설 토토: 0 

공지사항:사설 토토: 1 

NOTICE:사설 토토: 2 <<< 0 + 2, 지정된 대로 하나의 튜플만 삽입됨

실행
-----
    3 <<< 10은 최대값만, 3은 실수 튜플 수입니다.
(1줄)

vac= a에서 삭제;
3개 삭제
vac= 값에 삽입 (사설 토토('select * from a', 0) + 1);
삽입 167712 1
vac= a에서 *를 선택합니다;
엑스
-
1 <<< (0) + 1에는 튜플이 없습니다.
(1줄)

vac= 값에 삽입 (사설 토토('select * from a', 0) + 1);
공지사항:사설 토토: 0 
삽입 167713 1
vac= a에서 *를 선택합니다;
엑스
-
1
2 <<< a + 1에 단일 튜플이 있었습니다.
(2열)

-- 이는 데이터 변경 가시성 규칙을 보여줍니다.

vac= 선택에 삽입 사설 토토('select * from a', 0) * x from a;
공지사항:사설 토토: 1 
공지사항:사설 토토: 2 
공지사항:사설 토토: 1 
공지사항:사설 토토: 2 
공지사항:사설 토토: 2 
삽입 0 2
vac= a에서 *를 선택합니다;
엑스
-
1
2
2 <<< 2 튜플 * 1 (첫 번째 튜플의 x)
6 <<< 3개의 튜플(방금 삽입된 2 + 1) * 2(두 번째 튜플의 x)
(4열) ^^^^^^^^ 
                     다른 호출에서 사설 토토()에 표시되는 튜플

이전 다음
데이터 가시성 변경사항 위로 libpq