Вариант решения:
1. Устанавливаете язык plperl (имя пакета postgresql-plperl). Например,
для 32бит2. Добавляете язык, функцию и триггер в БД Transaction:
- Код: Выделить всё
CREATE LANGUAGE 'plperlu';
CREATE OR REPLACE FUNCTION exec_on_close_check() RETURNS trigger AS $$
if ($_TD->{new}{"tr_type"} eq 55) {
system("/usr/bin/dnc_after_closecheck");
return;
}
return;
$$ LANGUAGE plperlu;
CREATE TRIGGER exec_on_close_check AFTER INSERT ON "transaction" FOR EACH ROW execute procedure exec_on_close_check();
3. Размещаете в /usr/bin/ скрипт с именем dnc_after_closecheck примерно такого содержания:
- Код: Выделить всё
touch /var/Exchange/report.flr
chmod 666 /var/Exchange/report.flr
В приложении - примеры соответствующих скриптов.
Если брать их за основу, то изменения в БД можно внести командой
psql Transaction < ./realtime_unload.sql
P.S. В данном примере триггер будет срабатывать только на транзакцию с типом "55" (закрытие чека). Если надо что-то еще (отмена чека, отложенный чек, Z-отчет и т.п.) - надо добавить условия на колонку tr_type