On 23 October 2013 21:08, Andres Freund <and...@2ndquadrant.com> wrote: > On 2013-10-23 20:51:27 +0100, Dean Rasheed wrote: >> On 23 October 2013 02:18, Andres Freund <and...@2ndquadrant.com> wrote: >> > Hi, >> > >> > Using the same debugging hack^Wpatch (0001) as in the matview patch >> > (0002) an hour or so ago I noticed that INSERT INTO view WITH CHECK >> > doesn't lock the underlying relations properly. >> > >> > I've attached a sort-of-working (0003) hack but I really doubt it's the >> > correct approach, I don't really know enough about that area of the >> > code. >> > This looks like something that needs to be fixed. >> > >> >> Hmm, my first thought is that rewriteTargetView() should be calling >> AcquireRewriteLocks() on viewquery, before doing too much with it. >> There may be sub-queries in viewquery's quals (and also now in its >> targetlist) and I don't think the relations referred to by those >> sub-queries are getting locked. > > Well, that wouldn't follow the currently documented rule ontop > of QueryRewrite: > * NOTE: the parsetree must either have come straight from the parser, > * or have been scanned by AcquireRewriteLocks to acquire suitable locks. > > It might still be the right thing to do, but it seems suspicious that > the rules need to be tweaked like that. >
Well it matches what already happens in other places in the rewriter --- see rewriteRuleAction() and ApplyRetrieveRule(). It's precisely because the rule action's query hasn't come from the parser that it needs to be processed in this way. Regards, Dean -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers