Могу ли я выполнить вызов cURL из триггера postgres - PullRequest
2 голосов
/ 25 ноября 2010

Мне нужно создать вызов процесса для полей базы данных, имеющих определенный статус. Я слышал, что вы можете выполнить вызов cURL с помощью триггера db, но Google не настолько любезен, чтобы вернуть все, что я могу использовать.

Итак, мой вопрос состоит из трех частей:

  1. Можно ли это сделать?
  2. Ссылки
  3. Альтернативное решение?

Workflow:

Поле БД обновлено со статусом, необходимо запустить скрипт / запрос / процесс, который запускает следующий шаг в моем рабочем процессе (это скрипт PHP), который извлекает записанные в БД и обрабатывает другой шаг, затем обновляет БД с результатами.

Ответы [ 3 ]

6 голосов
/ 25 ноября 2010

Для этого не следует использовать триггеры, так как триггер блокирует транзакции, поэтому ваша база данных будет работать очень медленно. Также вам нужно установить небезопасный язык для Postgres & mdash; pl / sh, pl / perl, pl / python или др.

Есть 2 лучших решения этой проблемы:

  • имеет процесс, который подключается к базе данных и LISTEN s для NOTIFY событий, сгенерированных вашим триггером & mdash; это будет работать мгновенно;

  • периодически проверять наличие новых данных, используя, например, скрипт cron - это будет работать с задержкой.

3 голосов
/ 25 ноября 2010

Если вы можете вызвать сценарий оболочки, http://plsh.projects.postgresql.org/ вы можете вызвать скручивание.

Но у меня возникает жуткое чувство о подходе ...

  • Если удаленный сервер переходит в автономный режим, несоответствие данных ??

Альтернатива:

  • Я бы не стал использовать бизнес-логику в триггерах, только в настраиваемых ограничениях или денормализации.

  • Делайте то, что вам нужно, с помощью промежуточного уровня или хранимых процедур.

С уважением, // t

1 голос
/ 25 ноября 2010

Я думаю, что вы ищете триггер в postgres, который будет запускать необходимый скрипт.Триггеры объясняются в документации , синтаксис для добавления нового триггера объясняется здесь .Тип триггера, который вы ищете, выглядит как триггер AFTER UPDATE.Насколько я знаю, скрипт, который вы запускаете, должен проверить, имеет ли поле необходимый статус, так как postgres всегда будет запускать триггер.

...