http://www.postgresql-support.de

LOCK TABLE NOWAIT

Seit einiger Zeit gibt es die Möglichkeit, das Schlüsselwort NOWAIT zu verwenden. Oft kann es vorkommen, dass eine Transaktion auf einen Lock wartet. Das ist nicht immer sehr angenehm, da man so lange warten muss, bis eine gleichzeitig operierende Transaktion beendet wird. Will man sicherstellen, dass LOCK nicht auf einen Fehler wartet sondern sofort abbricht, wenn ein Lock nicht sofort zugeteilt werden kann, leistet NOWAIT gute Dienste.

Das folgende Beispiel zeigt diesen Sachverhalt:

BEGIN;
LOCK TABLE t_daten;
BEGIN;
LOCK TABLE t_daten NOWAIT;
ERROR: could not obtain lock on relation t_daten

Die zweite Transaktion bricht in diesem Fall ab, da die erste Transaktion bereits den Lock hält. Würde wir das kleine Wörtchen NOWAIT hier nicht verwenden, wäre sichergestellt, dass die zweite Transaktion wartet bis die erste Transaktion terminiert.

http://www.postgresql.at