0

我可以在 Postgresql 中创建的 pl/perl 函数中使用 DBI 来选择任何外部数据库吗?

我收到错误:无法将 DBI.pm 加载到 plperl

(我知道有 oracle 外部数据包装器,但我只需要存储针对 Oracle、MSSQL 或 PG 触发的 select 语句的结果集并将其存储在 Postgres 中。)

这是我的函数(目前只有连接字符串):

CREATE OR REPLACE FUNCTION sel_ora()
 RETURNS VOID AS $$

use DBI;

my $db = DBI->connect( "dbi:Oracle:DBKUNDEN", "stadl", "sysadm" )

    || die( $DBI::errstr . "\n" );


$$ LANGUAGE plperl;
4

1 回答 1

0

是的,您可以在 plperl 中使用 DBI。

请注意,出于安全原因,plperl 限制使用 perl 模块的访问。这适用于您的 postgres 用户不受信任的多用户数据库。

plperl 中的解决方案是在您的 postgresql.conf 文件中添加这样的一行:

plperl.on_init = 'use DBI;'

然后 DBI 将在您的 plperl 函数中可用。请参阅文档:https ://www.postgresql.org/docs/9.5/plperl-under-the-hood.html

或者,如果这种安全考虑不适用于您的情况,那么您可以使用plperlu (u = unrestricted) 代替 plperl。然后你可以直接从你的 plperlu 代码中使用任何 perl 模块。

于 2018-12-18T17:01:16.427 回答