从postgres函数/ procedure / trigger执行Bash脚本(Shell脚本)

问题描述 投票:3回答:2
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功能/程序中

bash postgresql perl centos postgresql-11
2个回答
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的默认行为是返回false值

我没有Postgresql安装来测试它。如果仍然无效,请告诉我们您遇到的错误。


0
投票

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

https://github.com/petere/plsh

© www.soinside.com 2019 - 2024. All rights reserved.