PostgreSQL存储过程可以调用外部程序吗?

时间:2015-04-28 23:17:41

标签: postgresql stored-procedures

我正在浏览PostgreSQL" Server Programming"用于编写存储过程的文档。我希望让存储过程调用现有的外部shell脚本来执行任务,然后返回结果。

我还没有在文档中找到这个。这支持了吗?

3 个答案:

答案 0 :(得分:4)

像p / perlu或PL / Pythonu这样的“不受信任的”PL可以像C用户定义的函数那样。

但这通常不是一个好主意。如果您调用外部程序然后回滚事务,外部程序将不知道回滚。你正在打破交易管理。

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

答案 1 :(得分:2)

是的,它可以但不是每个SP都可以做到这一点。 PL / pgSQL等受信任语言中的存储过程无法做到这一点。 Please refer to this选择不受信任的语言。

答案 2 :(得分:0)

以下是我在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)