我正在开发的一些库有不同的版本,并希望从我编写的各种 plperl 函数中,基于 current_database()
加载某个版本。
(IIRC 最好使用 use
而不是require
,我认为因为它可能会缓存库?
担心同一台服务器上的不同数据库会出现问题,无论我正在考虑这样做:
1)use lib
然后use
- 如果多个路径卡在@INC上,则可能不是正确的路径
2) require
--即使这意味着当前脚本中始终使用正确的脚本,是否意味着每次都会重新加载库? 无论哪种方式,如果库在使用后保持加载,来自不同版本的命名空间污染是否可能导致错误? (例如,如果我有一个基于是否定义变量的分支,并且在一个版本中它是默认的,而在另一个版本中它不是 - 所有版本现在都表现得好像是,除非我明确取消定义它而不仅仅是不定义它?
如果未通过 shared_preload_libraries 加载 plperl,则每个数据库会话都将在首次使用时重新初始化自己的解释器,因此一个会话包含的库不可能干扰另一个会话。
参见手册中的PL/Perl Under the Hood了解更多信息。