Предположительно, код должен быть синтаксически допустимым 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 не имеет
true
и false
, поэтому я заменил true
на 1 (что является истинным значением в Perl). И я удалил false
из другого оператора return
- по умолчанию return
возвращает ложное значение
У меня нет установки Postgresql, чтобы проверить это. Если это все еще не работает, пожалуйста, сообщите нам, какие ошибки вы получаете.