3
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 功能/程序中

4

2 回答 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而不是exec. exec替换当前进程——实际上永远不会返回调用函数
  • system期望传递一个字符串。所以我在命令周围添加了引号
  • and在流控制语句中通常比&&(并且总是比&位翻转而不是流控制要好得多)
  • Perl 没有trueand false,所以我true用 1 替换了(这是 Perl 中的真正值)。我已经false从另一个return语句中删除了 - 默认行为return是返回一个错误值

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

于 2019-03-25T15:11:23.583 回答
1

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

https://github.com/petere/plsh

于 2019-03-27T14:11:12.377 回答