从postgres函数/过程/触发器执行Bash脚本(Shell脚本)

时间:2019-03-25 14:52:24

标签: bash postgresql 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;

exec /home/postgres/test.sh及其显示的语法错误。 您能帮忙如何将bash脚本调用到postgres函数/过程中吗?

2 个答案:

答案 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代替了execexec替换了当前进程-实际上从未返回调用函数
  • system需要传递一个字符串。所以我在命令周围加上了引号
  • and在流控制语句中通常比&&更好(并且总是比&更好,后者是用于位翻转而不是流控制)
  • Perl没有truefalse,因此我用1替换了true(这是Perl中的真实值)。而且我已经从其他false语句中删除了return-return的默认行为是返回错误值

我没有Postgresql安装来对此进行测试。如果仍然无法正常工作,请告诉我们您遇到什么错误。

答案 1 :(得分:0)

pl / sh存在,可以用作程序语言。

https://github.com/petere/plsh