В основному ми хотіли б створити TRIGGER для кожної таблиці, про яку ми хочемо отримувати сповіщення про операцію UPDATE / INSERT / DELETE. Після запуску цього тригера він виконає функцію, яка просто додасть нову рядок (кодування події) до таблиці журналів, яку ми потім опитуємо від зовнішньої служби.
Це досить стандартне використання тригера.
Перш ніж розпочати роботу з Postgres TRIGGER, ми хотіли б дізнатися, як вони масштабують: скільки тригерів ми можемо створити в одній установці Postgres?
Якщо ви продовжуєте їх створювати, врешті-решт не вистачить місця на диску.
Немає конкретного обмеження для тригерів.
Ліміти PostgreSQL задокументовані на сторінці about .
Чи впливають вони на ефективність запитів?
Це залежить від типу тригера, мови тригера та того, що робить тригер.
Простий BEFORE ... FOR EACH STATEMENT
тригер PL / PgSQL, який нічого не робить, має майже нульові накладні витрати.
FOR EACH ROW
тригери мають вищі накладні витрати, ніж FOR EACH STATEMENT
тригери. Масштабування, очевидно, враховує порушений ряд.
AFTER
тригери коштують дорожче, ніж BEFORE
тригери, тому що їх потрібно ставити в чергу, поки оператор не закінчить виконувати свою роботу, а потім виконати. Вони не перекидаються на диск, якщо черга стає великою (принаймні в 9,4 і нижче, можливо, зміниться в майбутньому), тому величезні AFTER
тригерні черги можуть спричинити перевищення наявної пам'яті, в результаті чого оператор скасовує.
Тригер, який змінює NEW
рядок перед вставкою / оновленням, дешевший, ніж тригер, який робить DML.
Конкретний випадок використання, який ви хочете, матиме кращу ефективність із вдосконаленням у процесі роботи, яке може перетворити його на PostgreSQL 9.5 (якщо нам пощастить), де FOR EACH STATEMENT
тригери можуть бачити віртуальний OLD
та NEW
таблиці. У поточних версіях PostgreSQL це неможливо, тому вам потрібно використовувати FOR EACH ROW
тригери.
Хтось раніше пробував це?
Звичайно. Це досить стандартне використання тригерів, а також аудит, перевірка рівня безпеки та ін.
Ви захочете розглянути LISTEN
і NOTIFY
як добре розбудити свого працівника, коли відбудуться зміни в таблиці завдань.
Ви вже робите найважливіше, уникаючи спілкування із зовнішніми системами безпосередньо з пускових механізмів. Це, як правило, є проблематичним для продуктивності та надійності. Люди часто намагаються робити такі речі, як надсилання пошти безпосередньо з тригера, і це погана новина.