select for update a deadlocki

0

Select for update zakłada locka na dane, aż do końca transakcji. Zastanawia mnie przypadek w którym wykonuje select for update na tabeli A, a potem na tabeli B i wykonuje jakiś update na nich obu. Między selectem na tabeli A i B jest przerwa, zatem jeśli inna sesja wykona select for update pierw na B, a potem na A w tym samym czasie to mam deadlocka. Klient psql melduje o tym wykrytym błędem "deadlock detected".

Zastanawia mnie jak w takiej sytuacji należy postąpić, żeby unikać deadlocków. Domyślam się, że select for update powstał w tym celu, ponieważ bez niego locki zakładane są na rekordy w przypadku ich modyfikacji, a tak dzięki select for update mogę na nich założyć lock z dużym wyprzedzeniem.

Pytanie czy w przypadku dwóch tabel powinienem da się założyć (i czy powinno się założyć) locka na obie tabele za pomocą jednego select for update?

0

nie prościej spróbować i być pewnym?

0

Próbowałem, ale nie wychodziło mi.

0

Wg dokumentacji jest to możliwe. Może musisz ustawić odpowiednio konfigurację serwera?
http://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-FOR-UPDATE-SHARE

1 użytkowników online, w tym zalogowanych: 0, gości: 1