지원되는 버전:현재 (18) / 17 / 16 / 15 / 14 / 13
개발 버전:개발
지원되지 않는 버전:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

41.7. 와이즈 토토/펄 언더더후드

41.7.1. 구성

이 섹션에는 영향을 미치는 구성 매개변수가 나열되어 있습니다.와이즈 토토/펄. 다음 중 하나를 설정하려면 이전 매개변수와이즈 토토/펄있음 로드되었으므로 추가해야 합니다."와이즈 토토perl"custom_variable_classes목록 입력와이즈 토토.conf.

와이즈 토토perl.on_init (문자열)

Perl이 실행될 때 실행할 Perl 코드를 지정합니다. 인터프리터는 초기화되기 전에 먼저 초기화됩니다. 다음 사용자에 특화됨와이즈 토토perl또는와이즈 토토perlu. SPI 기능은 다음과 같습니다. 이 코드가 실행될 때는 사용할 수 없습니다. 코드 오류가 발생하여 실패하면 초기화가 중단됩니다. 인터프리터를 호출한 쿼리로 전파합니다. 현재 트랜잭션이나 하위 트랜잭션을 중단되었습니다.

Perl 코드는 단일 문자열로 제한됩니다. 더 길다 코드는 모듈에 배치되고에 의해 로드될 수 있습니다.on_init문자열. 예:

와이즈 토토perl.on_init = '"와이즈 토토perlinit.pl" 필요'
와이즈 토토perl.on_init = 'lib "/my/app" 사용; MyApp::PgInit 사용;'

에 의해 로드된 모든 모듈와이즈 토토perl.on_init, 직접 또는 간접적으로 다음 사용자가 사용할 수 있습니다.와이즈 토토perl. 이로 인해 보안 위험이 발생할 수 있습니다. 어떤 모듈이 로드되었는지 확인하려면 다음을 사용할 수 있습니다.

DO 'elog(WARNING, Join ", ", 정렬 키 %INC)' 언어 와이즈 토토perl;

초기화는 다음과 같은 경우 포스트마스터에서 발생합니다. 와이즈 토토perl 라이브러리는 다음에 포함되어 있습니다.shared_preload_libraries, 이 경우 추가 위험을 고려해야 한다. 우체국장을 불안정하게 만듭니다. 주된 이유는 이 기능을 사용하는 것은 Perl 모듈이 다음에서 로드된다는 것입니다.와이즈 토토perl.on_init로드 필요 postmaster 시작 시에만 즉시 사용할 수 있습니다. 개별 데이터베이스 세션에서 오버헤드를 로드하지 않고. 그러나 오버헤드는 피할 수만 있다는 점을 명심하세요. 데이터베이스 세션에서 사용되는 첫 번째 Perl 인터프리터 — 첫 번째 SQL 역할에 대해 PL/PerlU 또는 PL/Perl PL/Perl 함수를 호출합니다. 추가 Perl 데이터베이스 세션에서 생성된 통역사는 다음을 수행해야 합니다. 실행와이즈 토토perl.on_init새로웠어요. 또한 Windows에서는 다음과 같은 비용 절감 효과가 전혀 없습니다. Perl 인터프리터가 포스트마스터 프로세스가 하위 프로세스로 전파되지 않습니다. 프로세스.

이 매개변수는 다음에서만 설정할 수 있습니다.와이즈 토토.conf파일 또는 서버에 명령줄.

와이즈 토토perl.on_와이즈 토토perl_init (문자열)
와이즈 토토perl.on_와이즈 토토perlu_init (문자열)

이 매개변수는 Perl 코드가 다음과 같은 경우에 실행되도록 지정합니다. Perl 통역사는 다음에 특화되어 있습니다.와이즈 토토perl또는와이즈 토토perlu각각. 이는 PL/Perl 또는 PL/PerlU를 사용할 때 발생합니다. 함수는 데이터베이스 세션에서 처음 실행되거나 추가 통역사를 만들어야 합니다. 다른 언어가 호출되거나 PL/Perl 함수가 호출됩니다. 새로운 SQL 역할로. 이는 초기화가 완료된 후 수행됩니다. 으로와이즈 토토perl.on_init. SPI 이 코드가 실행되면 기능을 사용할 수 없습니다. Perl 코드는와이즈 토토perl.on_와이즈 토토perl_init다음 이후에 실행됨"잠금 중"에 통역사이므로 신뢰할 수 있는 작업만 수행할 수 있습니다. 운영.

코드가 오류로 인해 실패하면 중단됩니다. 초기화하고 호출 쿼리로 전파합니다. 현재 트랜잭션이나 하위 트랜잭션을 중단되었습니다. Perl 내에서 이미 수행된 모든 작업은 취소됨; 그러나 해당 통역사는 다시 사용되지 않습니다. 만약에 언어가 다시 사용되면 초기화는 다음과 같습니다. 새로운 Perl 해석기 내에서 다시 시도했습니다.

수퍼유저만이 이 설정을 변경할 수 있습니다. 비록 이러한 설정은 세션 내에서 변경될 수 있습니다. 변경 사항은 Perl 해석기에 영향을 미치지 않습니다. 이미 함수를 실행하는 데 사용되었습니다.

와이즈 토토perl.use_strict (부울)

와이즈 토토/Perl의 후속 컴파일을 true로 설정하면 함수에는엄격프라그마가 활성화되었습니다. 이 매개변수는 기능에 영향을 주지 않습니다. 현재 세션에서 이미 컴파일되었습니다.

41.7.2. 한계 및 누락 특징

다음 기능은 현재 PL/Perl에서 누락되었습니다. 하지만 그들은 환영할 만한 기여를 할 것입니다.

  • 와이즈 토토/Perl 함수는 서로 직접 호출할 수 없습니다.

  • SPI는 아직 완전히 구현되지 않았습니다.

  • 다음을 사용하여 매우 큰 데이터 세트를 가져오는 경우spi_exec_query, 당신은 그래야 해요 이것들은 모두 메모리에 들어갈 것임을 알고 있습니다. 당신은 피할 수 있습니다 이것을 사용하여spi_query/spi_fetchrow앞서 설명한 대로.

    설정 반환 함수가 있는 경우 비슷한 문제가 발생합니다. 다음을 통해 대규모 행 세트를 PostgreSQL로 다시 전달합니다.반환. 이 문제를 피할 수 있습니다 대신에를 사용하여도return_next이전에 표시된 대로 반환된 각 행에 대해.

  • 세션이 치명적인 오류로 인한 것이 아닌 정상적으로 종료된 경우, 모두END이미 차단된 블록 정의되어 실행됩니다. 현재 다른 작업은 없습니다. 수행. 특히, 파일 핸들은 자동으로 플러시되고 객체는 자동으로 파괴되지 않습니다.