PostgreSQL的plperlu解释器的@INC和/或缓存库:针对不同的数据库分开?

时间:2013-01-22 00:20:54

标签: postgresql caching include plperl global-namespace

我有一些我正在开发的库的不同版本,并希望从我编写的各种plperl函数中加载基于current_database()的特定版本。

(IIRC使用use而非require是首选,我认为因为它可能会缓存库?)

然而,我担心同一服务器上的不同数据库会出现问题,无论是我想到的那种方式:

1)use lib然后use - 如果多个路径卡在@INC上,则可能不是正确使用的路径

2)require - 即使这意味着在当前脚本中总是使用正确的一个,是否意味着每次都重新加载库?无论哪种方式,如果库一旦使用就保持加载,不同版本的命名空间污染是否可能导致错误? (例如,如果我根据是否定义了变量而拥有某个分支,并且在一个版本中它是默认的,而在另一个版本中它不是 - 现在所有版本都会像现在一样,除非我明确地取消定义它而不仅仅是没有定义它?)

1 个答案:

答案 0 :(得分:1)

如果plperl 通过shared_preload_libraries加载,则每个数据库会话将在首次使用时初始化其自己的解释器,因此一个会话包含的库不可能干扰另一个会话。

有关详情,请参阅手册中的PL/Perl Under the Hood