我正在浏览PostgreSQL" Server Programming"用于编写存储过程的文档。我希望让存储过程调用现有的外部shell脚本来执行任务,然后返回结果。
我还没有在文档中找到这个。这支持了吗?
答案 0 :(得分:4)
但这通常不是一个好主意。如果您调用外部程序然后回滚事务,外部程序将不知道回滚。你正在打破交易管理。
通常最好使用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)