2014-02-07 3 views
6

Я бы хотел запустить внешнюю программу (например, .net C# console) при запуске триггера PostgreSQL. Как я могу это достичь?Вызов внешней программы из триггера PostgreSQL

+0

Почему мой вопрос был отвергнут? любая причина? –

+0

Конечно, я искал решение. Я все еще не могу найти лучшее и быстрое решение. Любое альтернативное решение в порядке. –

ответ

8

Postgres обычно не может запускать внешние программы из соображений безопасности.

Типичным решением является использование NOTIFY и наличие демона LISTEN. Есть решения для всех основных языка сценариев там ...

+0

Является ли пример PHP блокировки? И что я хочу постоянно слушать? Не только для одного события, но и для каждого события? – CMCDragonkai

+0

По-видимому, есть очередь событий, которые не были прослушаны, поэтому все, что нужно сделать, это перезапустить прослушивание снова после обработки события. – CMCDragonkai

+0

Ссылка на интерфейс C++ (libpqxx) для этого: [http://pqxx.org/devprojects/libpqxx/doc/4.0/html/Reference/a00208.html](http://pqxx.org/devprojects/libpqxx/ DOC/4.0/HTML/Справка/a00208.html) – villapx

3

С Postgres 9.3 существует решение для вызова внешних программ. Это - по соображениям безопасности - ограниченные суперпользователям и IMHO, предназначенных для экспорта данных, а не делать «уведомление на спусковой крючок»:

COPY (SELECT 1) TO PROGRAM '/bin/touch /tmp/created_by_postgres' 

Если вы хотите на самом деле экспорт данных в вызванному программе, вы можете предоставить любые SELECT или имя таблицы вместо SELECT 1. Результаты запроса затем будут переданы вызываемой программе через стандартный ввод.

Вы можете найти документацию функции в документации Postgres: http://www.postgresql.org/docs/9.3/static/sql-copy.html

Смежные вопросы