이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

37.2. PL/토토 꽁 머니에서 데이터베이스 액세스

토토 꽁 머니 기능에서 데이터베이스 자체에 접근할 수 있습니다. 함수를 통해 수행됨spi_exec_query아래에 설명되어 있거나 실험 모듈DBD::PgSPI(다음에서도 사용 가능CPAN미러 사이트). 이 모듈은 다음을 제공합니다.DBI호환 데이터베이스 핸들 이름이 지정됨$pg_dbh수행하는 데 사용할 수 있는 일반 쿼리DBI구문.

PL/Perl 자체는 현재 두 개의 추가 Perl을 제공합니다. 명령:

spi_exec_query(질의 [, 최대 행])
spi_exec_query(명령)

SQL 명령을 실행합니다. 다음은 쿼리의 예입니다. (선택명령)을 선택적으로 사용 최대 행 수:

$rv = spi_exec_query('SELECT * FROM my_table', 5);

이것은 테이블에서 최대 5개의 행을 반환합니다.내_테이블. 만약에내_테이블열이 있습니다내_열, 행에서 해당 값을 얻을 수 있습니다.$i다음과 같은 결과:

$foo = $rv-행[$i]-my_column;

a에서 반환된 총 행 수SELECT쿼리는 다음과 같이 접근할 수 있습니다:

$nrows = $rv-처리됨

다음은 다른 명령 유형을 사용하는 예입니다:

$query = "my_table 값에 삽입(1, 'test')";
$rv = spi_exec_query($query);

그런 다음 명령 상태에 액세스할 수 있습니다(예:SPI_OK_INSERT) 다음과 같습니다:

$res = $rv-상태;

영향을 받은 행 수를 얻으려면 다음을 수행하십시오:

$nrows = $rv-처리됨;

다음은 완전한 예입니다:

테이블 생성 테스트(
    나는 int,
    v varchar
);

INSERT INTO test (i, v) VALUES (1, '첫 번째 줄');
INSERT INTO test (i, v) VALUES (2, '두 번째 줄');
INSERT INTO test (i, v) VALUES (3, '세 번째 줄');
INSERT INTO 테스트(i, v) VALUES(4, '불멸');

CREATE FUNCTION test_munge()는 SETOF 테스트를 $$로 반환합니다.
    내 $res = [];
    my $rv = spi_exec_query('테스트에서 i, v 선택;');
    내 $status = $rv-상태;
    내 $nrows = $rv-처리됨;
    foreach 내 $rn (0 .. $nrows - 1) 
        내 $row = $rv-행[$rn];
        $row-i += 정의된 경우 200($row-i);
        $row-v =~ tr/A-Za-z/a-zA-Z/ if (defined($row-v));
        푸시 @$res, $row;

    $res를 반환합니다.
$$ 언어 plperl;

SELECT * FROM test_munge();
elog(레벨, msg)

로그 또는 오류 메시지를 내보냅니다. 가능한 수준은 다음과 같습니다.디버그, 로그, 정보, 공지, 경고오류. 오류오류 조건을 발생시킵니다. 이것이 주변 Perl 코드에 의해 트랩되지 않으면 오류가 호출 쿼리로 전파되어 현재 트랜잭션 또는 하위 트랜잭션이 중단됩니다. 이것 사실상 Perl과 동일합니다.다이명령. 다른 레벨에서는 생성만 수행됩니다. 다양한 우선순위 수준의 메시지. 메시지 여부 특정 우선순위가 고객에게 보고되고 서면으로 작성됩니다. 서버 로그에 저장하거나 둘 다에 의해 제어됩니다.log_min_messages그리고client_min_messages구성 변수. 보다섹션 16.4더 보기 정보.