PostgreSQL';s plperlu口译员';s@INC和/或缓存库:对于不同的数据库是分开的吗?

PostgreSQL';s plperlu口译员';s@INC和/或缓存库:对于不同的数据库是分开的吗?,postgresql,caching,include,plperl,global-namespace,Postgresql,Caching,Include,Plperl,Global Namespace,我正在开发的一些库有不同的版本,并且希望在我编写的各种plperl函数中,基于current\u database()加载某个版本 (IIRC使用use而不是require是首选,因为它可能会缓存库?) 但是,我担心同一台服务器上的不同数据库会出现问题,无论是哪种方式,我都会考虑这样做: 1) 使用lib,然后使用——如果@INC上有多条路径被卡住,那么使用的可能不是正确的路径 2) require——即使这意味着当前脚本中始终使用正确的库,是否意味着每次都会重新加载库?无论哪种方式,如果库一经

我正在开发的一些库有不同的版本,并且希望在我编写的各种plperl函数中,基于
current\u database()
加载某个版本

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

但是,我担心同一台服务器上的不同数据库会出现问题,无论是哪种方式,我都会考虑这样做:

1)
使用lib
,然后
使用
——如果@INC上有多条路径被卡住,那么使用的可能不是正确的路径


2)
require
——即使这意味着当前脚本中始终使用正确的库,是否意味着每次都会重新加载库?无论哪种方式,如果库一经使用就保持加载状态,那么来自不同版本的名称空间污染是否可能导致bug?(例如,如果我有一个基于变量是否定义的分支,在一个版本中它是默认的,而在另一个版本中它不是——所有的版本现在都会像它一样工作,除非我显式地取消定义它而不是不定义它吗?

如果plperl是而不是加载的,每个数据库会话都有自己的解释器,在第一次使用时刚刚初始化,因此一个会话包含的库不可能干扰另一个会话

有关更多信息,请参阅手册中的