2012-05-23 27 views
6

Czy wyzwalacz AFTER INSERT (funkcja napisana w pl/PGsql) zostanie uruchomiony w oddzielnej transakcji niż oryginalna wkładka?Po uruchomieniu wyzwalacza w osobnej transakcji?

Martwi mnie to, jeśli wyzwalacz ma wyjątek.
Czy spust może zostać wycofany bez wpływu na oryginalną wkładkę?

+1

Czy ta oddzielna transakcja będzie mogła zostać wycofana niezależnie od głównej transakcji? – wildplasser

Odpowiedz

13

Wszystkie wyzwalacze PostgreSQL są wykonywane w tej samej transakcji, co wywołana transakcja.

Edit: Można również użyć LISTEN + NOTIFY wysłać wiadomość z spustem do kodu, który wykonuje poza transakcją. W takim przypadku wiadomość zostanie dostarczona tylko w momencie pomyślnego zatwierdzenia. Błędy w odsłuchach nie spowodują cofnięcia transakcji wyzwalającej.

6

Procedury wyzwalania działają w tej samej transakcji jako powiązane zdarzenia wyzwalające. Ale efekty procedury wyzwalacza można wycofać osobno.

Musisz dodać exception handling do wyzwalacza po.

Powiązane problemy