use*_*543 3 postgresql bash perl centos postgresql-11
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;
Run Code Online (Sandbox Code Playgroud)
exec /home/postgres/test.sh及其显示的语法错误。您能帮忙如何将bash脚本调用到postgres函数/过程中吗
据推测,该代码在语法上必须是有效的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;
Run Code Online (Sandbox Code Playgroud)
我改变了几件事:
$filename使用声明变量mysystem代替exec。exec替换当前进程-有效地从不返回调用函数system期望传递一个字符串。所以我在命令周围加了引号and通常在流控制语句中比&&(并且总是比&用于位翻转而不是流控制)要好。trueand false,所以我已经替换true为1(这是Perl中的真实值)。而且我已经false从其他return语句中删除了-的默认行为return是返回假值我没有Postgresql安装来对此进行测试。如果仍然无法解决问题,请告诉我们您遇到什么错误。