CREATE or replace FUNCTION test() RETURNS boolean AS $$
$filename = '/home/postgres';
if (-e $filename) {
exec /home/postgres/test.sh &
return true; }
return false;
$$ LANGUAGE plperlu;
exec /home/postgres/test.sh及其显示的语法错误。 您能帮忙如何将bash脚本调用到postgres函数/过程中吗?
答案 0 :(得分:5)
大概,该代码在语法上必须是有效的Perl。因此,您需要清理一些内容。
CREATE or replace FUNCTION test() RETURNS boolean AS $$
my $filename = '/home/postgres';
if (-e $filename) {
system '/home/postgres/test.sh' and return 1;
}
return;
$$ LANGUAGE plperlu;
我做了几件事:
$filename
声明变量my
system
代替了exec
。 exec
替换了当前进程-实际上从未返回调用函数system
需要传递一个字符串。所以我在命令周围加上了引号and
在流控制语句中通常比&&
更好(并且总是比&
更好,后者是用于位翻转而不是流控制)true
和false
,因此我用1替换了true
(这是Perl中的真实值)。而且我已经从其他false
语句中删除了return
-return
的默认行为是返回错误值我没有Postgresql安装来对此进行测试。如果仍然无法正常工作,请告诉我们您遇到什么错误。
答案 1 :(得分:0)
pl / sh存在,可以用作程序语言。