你可以使用 PL/Perl 中的库吗
我只是好奇在编写 PL/Perl 函数时是否可以使用 use My::Lib;
语句,或者启用 pragma 和功能(例如 'use strict; use feature 'switch ';
)。
I'm just curious if when writing PL/Perl functions if I can have a use My::Lib;
statement, or enable pragma's and features (e.g. 'use strict; use feature 'switch';
).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 PL/Perl 时则不然。它限制了 require 和 use 的使用,因此不能导入模块。但是,您可以安装 PL/Perlu(用于无限制模式),它允许您加载模块。
然而,plperlu 可以被视为存在安全风险,因为它还允许打开等文件系统命令。
Not when using PL/Perl. It restricts the use of require and use, so you cannot import modules. However, you can install PL/Perlu (for unrestricted mode) which allows you to load modules.
plperlu can be considered a security risk, however, as it also allows filesystem commands such as open.
出于安全目的,您不能在 plperl 下的函数内运行 use/require 语句,但可以在 plperlu 下运行。
如果您想以安全的方式使用模块,可以将 plperl.on_init = 'require "myperlinit.pl";' 添加到
postgresql.conf
文件中,然后创建数据目录中包含一个名为 myperlinit.pl 的 Perl 脚本,其中包含您的用途。这将需要重新启动数据库服务器,并且这些模块可供您的所有功能使用。如果你想开启严格模式,你可以通过
plperl.use_strict = true
来添加它。注意:当调用第一个 perl 函数时(而不是创建连接时),每个连接都会执行该脚本一次。
For security purposes you cannot run a use/require statement within a function under plperl, but you can under plperlu.
IF you want to use modules in a secure way, you can add
plperl.on_init = 'require "myperlinit.pl";'
to thepostgresql.conf
file, then create a perl script called myperlinit.pl in the data directory which contains your uses. This will require a restart of the database server and these modules are available to all of your functions.If you want strict mode turned on, you can
plperl.use_strict = true
will add it.Note: this script is executed once per connection when the first perl function is called, and not when the connection is created.