Es stimmt, dass INSERT
, UPDATE
oder DELETE
muss ROW EXCLUSIVE
erwerben zu aktualisierende Tabelle sperren.
Diese Sperre verhindert jedoch nicht SELECT
davon ab, normal zu arbeiten. SELECT
benötigt nur ACCESS SHARE
sperren. Dieses Schloss ist mit ROW EXCLUSIVE
kompatibel - mit anderen Worten, Sie können SELECT
perfekt ausführen während andere Daten durch INSERT
aktualisiert werden , UPDATE
oder DELETE
, solange Sie keine expliziten Sperren erwerben.
Mit anderen Worten, Sie sollten niemals Deadlocks sehen, wenn Sie den zweiten Ansatz verwenden (verwenden Sie einfach nicht SELECT FOR UPDATE
und es wird dir gut gehen).
Lesen Sie mehr in der PostgreSQL-Dokumentation .