이 문서는 지원되지 않는 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-처리됨;

다음은 완전한 예입니다:

CREATE TABLE 테스트(
    나는 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더 보기 정보.