Выполнить Bash-скрипт (Shell Script) из функции / процедуры / триггера postgres - PullRequest
3 голосов
/ 25 марта 2019
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

Ответы [ 2 ]

5 голосов
/ 25 марта 2019

Предположительно, код должен быть синтаксически допустимым 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, чтобы проверить это. Если это все еще не работает, пожалуйста, сообщите нам, какие ошибки вы получаете.

0 голосов
/ 27 марта 2019

pl / sh существует и может использоваться в качестве процедурного языка.

https://github.com/petere/plsh

...