można spróbować ALTER TABLE ... DISABLE TRIGGER
- ale to wymaga takiej samej wytrzymałości zamka, więc nie sądzę, żeby to zrobić ci wiele dobrego.
W PostgreSQL 9.4 jest praca, która powoduje, że ALTER TABLE
pobiera słabsze blokady dla niektórych operacji. To może pomóc w tym.
W międzyczasie musiałbym CREATE OR REPLACE FUNCTION
zastąpić wyzwalacz prostą funkcją "no-op".
Następnie, aby faktycznie spaść spust, to bym pewnie napisać skrypt, który wykonuje:
BEGIN;
LOCK TABLE the_table IN ACCESS EXCLUSIVE MODE NOWAIT;
DROP TRIGGER ...;
COMMIT;
Jeśli ktoś używa tabeli skrypt przerwie na LOCK TABLE
.
Następnie uruchomiłbym go w pętli, aż do skutku.
Jeśli to nie działa (jeśli stół jest zawsze zajęty), ale jeśli większość transakcji były bardzo krótkie, mogę próba LOCK TABLE
bez NOWAIT
, ale ustawić krótki statement_timeout
. Tak więc skrypt będzie wyglądał mniej więcej tak:
BEGIN;
SET LOCAL statement_timeout = '5s';
LOCK TABLE the_table IN ACCESS EXCLUSIVE MODE NOWAIT;
DROP TRIGGER ...;
COMMIT;
Zapewnia to dość krótkie zakłócenie przez niepowodzenie, jeśli nie jest w stanie ukończyć pracy na czas. Znowu bym go uruchamiał okresowo, aż to się uda.
Jeśli żadne z tych podejść nie przyniosło skutku - powiedzmy, z powodu wielu długotrwałych transakcji - prawdopodobnie po prostu zaakceptowałbym potrzebę zablokowania go na chwilę. Uruchomiłbym drop trigger
, a następnie wszystkie transakcje równoległe, które utrzymywały blokady w tabeli, aby ich połączenia spadły, a ich transakcje zakończone. To pozwoliłoby, aby drop trigger
postępowało szybko, kosztem większych zakłóceń. Możesz rozważyć takie podejście tylko wtedy, gdy twoje aplikacje są dobrze napisane, więc będą po prostu ponawiać próby transakcji na przejściowych błędach, takich jak spadki połączeń.
Innym możliwym podejściem jest wyłączenie (nie upuszczenie) wyzwalacza poprzez bezpośrednią modyfikację katalogów systemowych.
Myślę, że 'NOWAIT' w twoim drugim zapytaniu SQL jest błędem. –
Miło, wielkie dzięki za odpowiedź! Spróbuję tego krótko, ale dostarczone informacje są świetne i zawierają sposoby na osiągnięcie tego, czego potrzebuję! Niesamowite! – Krynble
Po prostu dodając notatkę, uruchomiłem zapytanie i zadziałało jak czar! Spust natychmiastowy całkowicie odporny!Wielkie dzięki! – Krynble