Michael Fuhr <mike@xxxxxxxx> writes: > xactA: updates row > xactB: attempts to update same row, blocks until xactA completes > xactC: query finds xactA in row's xmax > xactA: commits > xactB: unblocks and acquires a lock on the row > xactC: query to pg_locks doesn't find xactA, so assumes row not locked > Does that sound like what you're talking about? Right. Furthermore, xactC's query result could have been stale when it was obtained, nevermind the separate query to pg_locks: xactA: updates row xactC: starts, sets snapshot xactB: attempts to update same row, blocks until xactA completes xactA: commits xactB: unblocks and acquires a lock on the row xactC: query finds xactA in row's xmax because of MVCC rules regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq