nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Re: [PGSQL] TABLE LOCK vs. SELECT mit ON UPDATE Klausel

Von: Bernd Nawothnig (bernd.nawothnig@t-online.de) [Profil]
Datum: 16.10.2009 03:11
Message-ID: <irtkq6x324.ln2@bernd.nawothnig.dialin.t-online.de>
Newsgroup: de.comp.datenbanken.misc
Hallo zusammen,

um paralleles Rechnen zu steuern, verwende ich eine Tabelle, in der
Tasks zeilenweise eingetragen sind. Ist die host-Spalte NULL, ist der
Task frei. Jeder Client fragt die Tabelle ab und greift sich die erste
Zeile (LIMIT 1), in der die host-Spalte NULL ist und setzt in
derselben Transaktion die Hostspalte auf den eigenen Hostnamen. Um das
Problem des gleichzeitigen Zugriffs zweier Clients auf dieselbe Zeile
zu lösen, verwende ich bisher einen LOCK TABLE IN ACCESS ECLUSIVE
MODE, was soweit auch gut zu funktionieren scheint.

Allerdings erscheint mir das reichlich schweres Geschütz und ich bin
gerade auf die ON UPDATE Klausel der SELECT Anweisung gestoßen, die
ziemlich exakt das zu machen scheint, was ich eigentlich nur brauche.

Allerdings finde ich in der Dokumentation das hier:

SELECT FOR UPDATE will wait for the other transaction to
complete, and will then lock and return the updated row (or no row, if
^^^^^^^^^^^^^^^^^^^^^^
the row was deleted).

Was aber passiert, wenn nach dem anderen UPDATE die WHERE Klausel der
wartenden Transaktion gar nicht mehr erfüllt ist (in diesem fall
wäre
die host-Spalte nicht mehr NULL)? Wird dann die "falsche" Zeile (so
könnte man die Doku nämlich lesen, was ich aber eigentlich
nicht
glauben kann), die nächste Zeile oder gar nichts geliefert?

Die nächste Zeile, so es noch eine solche gibt, wäre exakt
das, was
ich bräuchte.




Bernd

--
No time toulouse

[ Auf dieses Posting antworten ]

Antworten