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

42.7. PL/펄 언더더후드

42.7.1. 구성

이 섹션에는 영향을 미치는 구성 매개변수가 나열되어 있습니다.PL/펄.

pl사설 토토 사이트.on_init (문자열)

Perl 인터프리터가 실행될 때 Perl 코드가 실행되도록 지정합니다. 다음에 의해 사용되도록 특수화되기 전에 먼저 초기화되었습니다.pl사설 토토 사이트또는pl사설 토토 사이트u. SPI 이 코드가 실행되면 기능을 사용할 수 없습니다. 코드 오류가 발생하여 실패하면 초기화가 중단됩니다. 인터프리터를 호출한 쿼리로 전파하여 현재 거래 또는 하위 거래가 중단됩니다.

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

pl사설 토토 사이트.on_init = '"pl사설 토토 사이트init.pl" 필요'
pl사설 토토 사이트.on_init = 'lib "/my/app" 사용; MyApp::PgInit 사용;'

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

DO 'elog(경고, 조인 ", ", 정렬 키 %INC)' LANGUAGE pl사설 토토 사이트;

pl사설 토토 사이트이 다음과 같은 경우 포스트마스터에서 초기화가 발생합니다. 라이브러리는 다음에 포함되어 있습니다.shared_preload_libraries, 이 경우에는 다음의 위험에 대해 추가적인 고려가 이루어져야 합니다. 우체국장을 불안정하게 만듭니다. 사용하는 가장 큰 이유 이 기능 중 하나는 Perl 모듈이 로드된다는 것입니다.pl사설 토토 사이트.on_init포스트마스터에서만 로드되어야 함 오버헤드를 로드하지 않고도 즉시 사용할 수 있습니다. 개별 데이터베이스 세션. 그러나 오버헤드는 다음에 의해 사용되는 첫 번째 Perl 인터프리터에 대해서만 방지됩니다. 데이터베이스 세션 — 첫 번째 SQL의 경우 PL/PerlU 또는 PL/Perl PL/Perl 함수를 호출하는 역할. 추가 Perl 데이터베이스 세션에서 생성된 인터프리터는 실행되어야 합니다.pl사설 토토 사이트.on_init새로웠어요. 또한, 윈도우에서는 Perl을 사용하기 때문에 사전 로드로 인한 비용 절감은 전혀 없습니다. 포스트마스터 프로세스에서 생성된 인터프리터는 다음으로 전파되지 않습니다. 하위 프로세스.

이 매개변수는 다음에서만 설정할 수 있습니다.postgresql.conf파일 또는 서버 명령 라인.

pl사설 토토 사이트.on_pl사설 토토 사이트_init (문자열)
pl사설 토토 사이트.on_pl사설 토토 사이트u_init (문자열)

이 매개변수는 Perl이 실행될 때 Perl 코드가 실행되도록 지정합니다. 통역사는 다음 분야에 특화되어 있습니다.pl사설 토토 사이트또는pl사설 토토 사이트u각각. 이런 일이 일어날 것입니다 PL/Perl 또는 PL/PerlU 함수가 데이터베이스에서 처음 실행될 때 세션 또는 추가 통역사를 만들어야 하는 경우 다른 언어가 호출되거나 PL/Perl 함수가 호출되기 때문입니다. 새로운 SQL 역할에 의해 호출됩니다. 이는 다음의 초기화를 따릅니다.pl사설 토토 사이트.on_init. SPI 기능은 아닙니다 이 코드가 실행될 때 사용할 수 있습니다. 사설 토토 사이트 코드는pl사설 토토 사이트.on_pl사설 토토 사이트_init다음 이후에 실행됨"잠금 중"통역사이므로 이는 다음과 같은 작업만 수행할 수 있습니다. 신뢰할 수 있는 작업을 수행합니다.

코드가 오류로 인해 실패하면 초기화가 중단됩니다. 호출 쿼리로 전파되어 현재 거래 또는 하위 거래가 중단됩니다. 이미 어떤 활동을 했는지 Perl 내에서 완료된 작업은 취소되지 않습니다. 하지만 그 통역사는 그렇지 않습니다 다시 사용할 수 있습니다. 해당 언어를 다시 사용하면 초기화 새로운 Perl 해석기 내에서 다시 시도됩니다.

수퍼유저만이 이 설정을 변경할 수 있습니다. 비록 이러한 설정은 세션 내에서 변경될 수 있지만 이러한 변경 사항은 적용되지 않습니다. 이미 실행에 사용된 사설 토토 사이트 인터프리터에 영향을 줍니다. 기능.

pl사설 토토 사이트.use_strict (부울)

true로 설정되면 PL/사설 토토 사이트 함수의 후속 컴파일은 를 가지고 있다엄격프라그마가 활성화되었습니다. 이 매개변수는 현재 컴파일된 함수에 영향을 주지 않습니다. 세션.

42.7.2. 제한사항 및 누락된 기능

다음 기능은 현재 PL/Perl에는 없지만 그들은 환영받는 기여를 할 것입니다.

  • PL/사설 토토 사이트 함수는 서로 직접 호출할 수 없습니다.

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

  • 다음을 사용하여 매우 큰 데이터 세트를 가져오는 경우spi_exec_query, 이 내용은 다음과 같습니다. 모두 메모리에 들어갑니다. 다음을 사용하여 이를 방지할 수 있습니다.spi_query/spi_fetchrow다음과 같이 앞서 설명했습니다.

    집합 반환 함수가 다음을 통과하면 비슷한 문제가 발생합니다. 다음을 통해 PostgreSQL로 돌아가는 대규모 행 집합반환. 대신에 이 문제를 피할 수도 있습니다 사용 중return_next반환된 각 행에 대해, 이전에 표시된 대로입니다.

  • 세션이 치명적인 오류로 인한 것이 아닌 정상적으로 종료되는 경우 어떠한 경우에도END정의된 블록은 다음과 같습니다. 실행. 현재 다른 작업은 수행되지 않습니다. 구체적으로, 파일 핸들은 자동으로 플러시되지 않으며 객체도 플러시되지 않습니다. 자동으로 파기됩니다.