2013-01-22 6 views
0

필자가 작성한 다양한 라이브러리의 다른 버전을 가지고 있는데, 작성한 다양한 plperl 함수에서 current_database()을 기반으로 특정 버전을로드합니다.PostgreSQL의 plperlu interpreter의 @INC 및/또는 캐시 된 라이브러리 : 다른 데이터베이스에 대해 별도?

(이 라이브러리를 캐시 할 수 있기 때문에 IIRC이 바람직하다 use 오히려 require보다 사용하여, 나는 생각?)

하지만, 내 두려움이 동일한 서버에 다른 데이터베이스 나 '중 하나의 방법으로, 문제가있는 것입니다 그 일의 m 생각 :

1) use lib 하나 개 이상의 경로 굳이 이렇게 다음 use가 @INC에 걸리면, 그것은

이 사용됩니다 오른쪽에 하나) require라는 말이다 경우를하지 않을 수 있습니다 이것은 올바른 것이 항상 c에서 사용된다는 것을 의미합니다. 라이브러리 스크립트가 매번 다시로드된다는 의미입니까? 그리고 라이브러리를 한 번 사용하면로드가 유지되면 다른 버전의 네임 스페이스 오염으로 인해 버그가 발생할 수 있습니까? 예를 들어 변수가 정의되어 있는지 여부에 따라 분기가있는 경우 (기본적으로 하나의 버전에서는 기본적으로, 다른 버전에서는 그렇지 않은 경우) - 모든 버전이 그대로 작동합니다. 그것을 정의하지?)

답변

1

을 plperl가 shared_preload_libraries을 통해로드하지 않은 경우, 각 데이터베이스 세션은 자신의 통역 갓 처음 사용할 때 초기화해야합니다, 그래서 하나 개의 세션으로 포함 된 라이브러리는 아마도 다른 세션을 방해 할 수 없습니다.

자세한 내용은 PL/Perl Under the Hood의 설명서를 참조하십시오.