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?