Zasadniczo chcielibyśmy utworzyć TRIGGER dla każdej tabeli, dla której chcemy być powiadamiani o operacji UPDATE / INSERT / DELETE. Gdy ten wyzwalacz zostanie uruchomiony, wykona funkcję, która po prostu doda nowy wiersz (kodowanie zdarzenia) do tabeli dziennika, którą następnie sondujemy z usługi zewnętrznej.
To dość standardowe użycie wyzwalacza.
Przed przystąpieniem do all-inu z wyzwalaczami Postgres chcielibyśmy wiedzieć, jak się skalują: ile wyzwalaczy możemy stworzyć w ramach jednej instalacji Postgres?
Jeśli będziesz je dalej tworzyć, w końcu zabraknie Ci miejsca na dysku.
Nie ma określonego limitu wyzwalaczy.
Limity PostgreSQL są udokumentowane na stronie about .
Czy wpływają na wydajność zapytań?
Zależy to od typu wyzwalacza, języka wyzwalacza i jego działania.
Prosty BEFORE ... FOR EACH STATEMENT
wyzwalacz PL / PgSQL, który nic nie robi, ma narzut bliski zeru.
FOR EACH ROW
wyzwalacze mają wyższy narzut niż FOR EACH STATEMENT
wyzwalacze. Skalowanie, oczywiście, z liczonymi wierszami.
AFTER
wyzwalacze są droższe niż BEFORE
wyzwalacze, ponieważ muszą być ustawione w kolejce, dopóki instrukcja nie zakończy wykonywania swojej pracy, a następnie wykonane. Nie są one rozlewane na dysk, jeśli kolejka się powiększy (przynajmniej w wersji 9.4 i niższej może się zmienić w przyszłości), więc ogromne AFTER
kolejki wyzwalające mogą spowodować przepełnienie dostępnej pamięci, co powoduje przerwanie instrukcji.
Wyzwalacz, który modyfikuje NEW
wiersz przed wstawieniem / aktualizacją, jest tańszy niż wyzwalacz, który wykonuje DML.
Konkretny przypadek użycia, który chcesz, działałby lepiej dzięki ulepszeniu w toku, które może przekształcić go w PostgreSQL 9.5 (jeśli mamy szczęście), gdzie FOR EACH STATEMENT
wyzwalacze mogą zobaczyć wirtualny OLD
i NEW
tabele. Nie jest to możliwe w obecnych wersjach PostgreSQL, dlatego FOR EACH ROW
zamiast tego należy użyć wyzwalaczy.
Czy ktoś wcześniej tego próbował?
Oczywiście. Jest to dość standardowe zastosowanie do wyzwalaczy, wraz z audytem, sprawdzaniem czystości itp.
Będziesz chciał przyjrzeć się LISTEN
i NOTIFY
znaleźć dobry sposób na obudzenie pracownika, gdy nastąpią zmiany w tabeli zadań.
Już robisz najważniejszą rzecz, unikając rozmowy z systemami zewnętrznymi bezpośrednio z wyzwalaczy. Jest to zwykle problematyczne pod względem wydajności i niezawodności. Ludzie często próbują robić rzeczy takie jak wysyłanie poczty bezpośrednio z wyzwalacza, a to złe wieści.