PostgreSQL存储过程能否调用外部程序?

4
我正在查看 PostgreSQL "服务器编程" 文档,以编写存储过程。我想要一个存储过程调用现有的外部 shell 脚本执行任务,然后返回结果。
我在文档中没有找到这个功能。这个功能被支持吗?

我想我弄清楚了。我只看了PL/pgSQL。现在我改为使用PL/Perl,希望能找到类似于system(...)的东西。 - Stéphane
提示:事务... - wildplasser
@wildplasser 事务与问题有什么关系? - Stéphane
3个回答

4
"

不可信的PLs(例如PL / perlu或PL / Pythonu)以及C用户定义的函数都可以使用。

但通常不是一个好主意。如果调用外部程序,然后回滚事务,则外部程序将不知道回滚。您正在退出事务管理。

通常最好使用NOTIFY将工作发送到连接并LISTEN事件的守护程序。

"

3

以下是我在Ubuntu上的操作方法。请注意,安装PostgreSQL时,默认情况下不会安装plperl。

> sudo apt-get install postgresql-plperl
> sudo --user=postgres psql my_database

# CREATE EXTENSION IF NOT EXISTS plperlu;
# CREATE OR REPLACE FUNCTION foo() RETURNS TEXT AS $$
    return `/bin/echo -n "hello world!"`;
    $$ LANGUAGE plperlu;

# select foo();
     foo
-------------
 hello world!
(1 row)

2
是的,它可以,但并非每个SP都能做到。在像PL/pgSQL这样的受信任语言中,存储过程无法做到这一点。请参考此处选择您的不受信任语言。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接