【问题标题】:PERL DBI in PL/PERL in POSTGRESQLPOSTGRESQL 中的 PL/PERL 中的 PERL DBI
【发布时间】:2023-03-03 05:57:21
【问题描述】:

我可以在 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;

【问题讨论】:

  • 实际的完整错误消息是什么?
  • 错误信息是:SQL 错误 [42601]: 错误: Unable to load DBI.pm into plperl at line 3 BEGIN failed--compiled aborted at line 3

标签: dbi plperl


【解决方案1】:

是的,您可以在 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 = 无限制)代替 plperl。然后你可以直接从你的 plperlu 代码中使用任何 perl 模块。

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 2015-05-11
    • 1970-01-01
    • 2015-03-28
    • 2013-12-16
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多