2016-07-27 23 views
0

ich über die Datenbank zu implementieren versuche Verriegelung mit dem SELECT FOR UPDATE psql Befehl https://www.postgresql.org/docs/9.1/static/explicit-locking.htmlPSQL: Reihe über Select FOR UPDATE Verriegelungs

kann ich nicht tun dies viel Dokumentation finden um, neben der Tatsache, dass der Befehl für Datenbank erlaubt Zeilenbasiertes Sperren

Ich frage mich, was passiert, wenn Thread 1 zuerst SELECT FOR UPDATE ausführt, dann kommt Thread 2 kurz danach und versucht, denselben Befehl auszuführen. Wird Thread 2 blockiert, bis die Datenbanktransaktion in Thread 1 festgeschrieben oder rückgängig gemacht wird?

+0

Warum versuchst du es nicht? Anstelle von Threads können Sie dies simulieren, indem Sie zwei Sitzungen in einer PostgreSQL-Datenbank öffnen und die Befehle nacheinander in einer Transaktion ausführen. – sstan

Antwort

1

Ja, Thread2 wartet, bis Thread1 abgeschlossen ist.

Sie können NOWAIT oder SKIP LOCKS verwenden, um zu verhindern, dass der Vorgang abwartet (siehe SELECT in the documentation).