On Nov 1, 2009, at 10:12 AM, Tom Lane <t...@sss.pgh.pa.us> wrote:

Robert Haas <robertmh...@gmail.com> writes:
On Sat, Oct 31, 2009 at 5:00 PM, Marko Tiikkaja
<marko.tiikk...@cs.helsinki.fi> wrote:
What I've had in mind is pipelining the execution only when it doesn't have *any* impact on the outcome. This would mean only allowing it when the top-level statement is either a SELECT or an INSERT. Also, UPDATEs and DELETEs inside CTEs can't have the same result relations. Whether or not we want to break the expected(?) behaviour for statement- level
triggers, I have no opinion to way or another.

You'd also have to disallow the case when there are any triggers on
the INSERT, or where there are any triggers on anything else (because
they might access the target table of the INSERT).  This will end up
being so restricted as to be useless.

Well, it's already the case that BEFORE triggers shouldn't count on
seeing any particular subset of a statement's results completed.
We could define AFTER triggers as all being fired after the entire
statement is complete (which is not the direction my patch was headed
in, but I have no allegiance to that).  So I think we could define our
way out of the trigger timing issue, and I don't see any big objection
to limiting pipelining to cases where the sub-statements' target tables
don't overlap.

Hmm... yeah. If we do that, then pipelining becomes a much more feasible optimization. I think that definition is a bit more likely to result in POLA violations, but I'm not sure by how much.

However, this still doesn't address the problem of what happens when the
top-level select fails to read all of the CTE output (because it has a
LIMIT, or the client doesn't read all the output of a portal, etc etc).
Partially executing an update in such cases is no good.

Well, like you said elsewhere on this thread, you just have to finish out any remaining bits after the main query completes.

...Robert

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to