问题
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 & its showing syntax error. Could you please help how to call bash script into postgres funtion/procedure
回答1:
Presumably, the code needs to be syntactically valid Perl. So you'll need to clean up a few bits.
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;
I've changed a few things:
- I declare the variable
$filename
usingmy
- I used
system
instead ofexec
.exec
replaces the current process - effectively never returning to the calling function system
expects to be passed a string. So I've added quotes around the commandand
is usually better in flow control statements than&&
(and always much better than&
which is for bit-flipping, not flow control)- Perl doesn't have
true
andfalse
, so I've replacedtrue
with 1 (which is a true value in Perl). And I've removed thefalse
from the otherreturn
statement - the default behaviour ofreturn
is to return a false value
I don't have a Postgresql installation to test this on. If it still doesn't work, please tell us what errors you get.
回答2:
pl/sh exists, and can be used as a procedual language.
https://github.com/petere/plsh
来源:https://stackoverflow.com/questions/55340567/execute-a-bash-script-shell-script-from-postgres-function-procedure-trigger