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

Execute a Bash script (Shell Script) from postgres function/procedure/trigger

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 funtion/procedure

据推测,代码需要是语法上有效的 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;

我改变了一些东西:

  • 我使用 my
  • 声明变量 $filename
  • 我用 system 而不是 execexec 替换当前进程 - 实际上永远不会 returning 到调用函数
  • system 期望传递一个字符串。所以我在命令周围添加了引号
  • and 在流控制语句中通常比 && 好(并且总是比 & 好得多,后者用于位翻转,而不是流控制)
  • Perl 没有 truefalse,因此我将 true 替换为 1(这是 Perl 中的真实值)。我已经从另一个 return 语句中删除了 false - return 的默认行为是 return 一个错误值

我没有 Postgresql 安装来测试它。如果还是不行,请告诉我们你遇到了什么错误。

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

https://github.com/petere/plsh