从 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
而不是 exec
。 exec
替换当前进程 - 实际上永远不会 returning 到调用函数
system
期望传递一个字符串。所以我在命令周围添加了引号
and
在流控制语句中通常比 &&
好(并且总是比 &
好得多,后者用于位翻转,而不是流控制)
- Perl 没有
true
和 false
,因此我将 true
替换为 1(这是 Perl 中的真实值)。我已经从另一个 return
语句中删除了 false
- return
的默认行为是 return 一个错误值
我没有 Postgresql 安装来测试它。如果还是不行,请告诉我们你遇到了什么错误。
pl/sh存在,可以作为程序语言使用。
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
声明变量 - 我用
system
而不是exec
。exec
替换当前进程 - 实际上永远不会 returning 到调用函数 system
期望传递一个字符串。所以我在命令周围添加了引号and
在流控制语句中通常比&&
好(并且总是比&
好得多,后者用于位翻转,而不是流控制)- Perl 没有
true
和false
,因此我将true
替换为 1(这是 Perl 中的真实值)。我已经从另一个return
语句中删除了false
-return
的默认行为是 return 一个错误值
$filename
我没有 Postgresql 安装来测试它。如果还是不行,请告诉我们你遇到了什么错误。
pl/sh存在,可以作为程序语言使用。