Skip site navigation (1) Skip section navigation (2)

Handling conflicting FOR UPDATE/SHARE specs

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-hackers(at)postgreSQL(dot)org
Subject: Handling conflicting FOR UPDATE/SHARE specs
Date: 2006-04-30 00:58:42
Message-ID: 10359.1146358722@sss.pgh.pa.us (view raw or flat)
Thread:
Lists: pgsql-hackers
Currently, we disallow use of both FOR UPDATE and FOR SHARE in a single
query, as well as use of both NOWAIT and default "WAIT" semantics.
There is no reason for this except inadequately flexible data
representation, ie, a single flag for the whole Query instead of one per
target relation.  I'm about to go fix that, because it looks to me like
the code will actually end up simpler as well as more flexible.

However, I notice that there is a definitional question this opens up:
what should happen given conflicting specifications for the same
relation?  The obvious case is

	FOR UPDATE OF x,y FOR SHARE OF y

but there is also the case of

	FOR SHARE FOR UPDATE OF y

where the "FOR SHARE" implies all relations and therefore implicitly
conflicts with the per-relation FOR UPDATE flag on y.

Seems like we could adopt one of two attitudes: "throw an error"
or "use the more restrictive behavior" (the latter would make
FOR UPDATE win over FOR SHARE, and probably NOWAIT over WAIT).

In the case of the all-relations vs some-relations specs, we could also
try to make the all-relations spec apply only to the relations not
listed explicitly.  But doing that seems a bit painful, particularly if
you want it to work independently of ordering of the clauses.

Another case to think about is that we consider FOR UPDATE/SHARE on a
view to mean that the clause propagates to all tables used in the view.
So if there's already any FOR UPDATE/SHARE specs inside the view
definition, "throw an error" would cause the query to fail unless
they're exactly like the clause applied to the view.  (This is what
happens now, but it's not very nice IMHO.)  "Use the more restrictive
behavior" seems like a more pleasant way to combine specs in this case.

I'm kind of leaning to "use the more restrictive behavior" but wanted
to ask if anyone really hates that.

			regards, tom lane

pgsql-hackers by date

Next:From: Rod TaylorDate: 2006-04-30 01:26:02
Subject: Re: Is a SERIAL column a "black box", or not?
Previous:From: markDate: 2006-04-29 23:41:15
Subject: Re: Is a SERIAL column a "black box", or not?

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group