8

我只是好奇在编写 PL/Perl 函数时是否可以use My::Lib;声明,或者启用编译指示和功能(例如 ' use strict; use feature 'switch';)。

4

2 回答 2

7

不是在使用 PL/Perl 时。它限制了 require 和 use 的使用,所以你不能导入模块。但是,您可以安装允许您加载模块的 PL/Perlu(用于不受限制的模式)。

然而,plperlu 可以被认为是一种安全风险,因为它还允许文件系统命令,例如 open。

于 2010-08-20T04:07:10.363 回答
2

出于安全目的,您不能在 plperl 下的函数中运行 use/require 语句,但可以在 plperlu 下运行。

如果您想以安全的方式使用模块,您可以添加plperl.on_init = 'require "myperlinit.pl";'postgresql.conf文件中,然后在包含您的用途的数据目录中创建一个名为 myperlinit.pl 的 perl 脚本。这将需要重新启动数据库服务器,并且这些模块可用于您的所有功能。

如果你想打开严格模式,你可以plperl.use_strict = true添加它。

注意:此脚本在调用第一个 perl 函数时每个连接执行一次,而不是在创建连接时执行。

于 2016-06-18T09:06:45.310 回答