On Thu, Jan 7, 2010 at 11:08 AM, Markus Wanner <mar...@bluegap.ch> wrote: > Row level locks are very fine grained, but those are spilled to disk in > its current implementation. So those are an even worse fit for the needs > of SIREAD. >
I think we're still talking past the issue. Predicate locks are not row level, nor page level, nor table level. They're locks on predicates. Ie, you have to lock against values which aren't actually currently in the table at all. You need to be able to detect a conflict between a transaction which read rows "WHERE i BETWEEN 1 AND 10" and one which tries to insert a row with i=1 even if the first transaction didn't see any rows with i=1 (or indeed even if the first transaction found no rows at all). That's the hard part. How do you represent such a lock in a way that I can efficiently find it and check for the conflict when it comes time for me to do my insert. And how do you do that without tying the implementation to specific details of how our planner, table scans, and index access methods work? -- greg -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers