While trying to construct testcases for a patch, I ran into this: execAmi.c has a function ExecMayReturnRawTuples which indicates whether a given plan might return tuples that come straight from a table rather than having been projected.
InitPlan() uses this to force the addition of a junk filter to INSERT or SELECT INTO queries that return raw tuples, with this comment: * Initialize the junk filter if needed. SELECT and INSERT queries need a * filter if there are any junk attrs in the tlist. INSERT and SELECT * INTO also need a filter if the plan may return raw disk tuples (else * heap_insert will be scribbling on the source relation!). UPDATE and However, tracing through the code suggests that neither ExecInsert not intorel_receive will modify a passed raw tuple - ExecInsert calls ExecMaterializeSlot before heap_insert, and intorel_receive calls ExecCopySlotTuple before heap_insert. So is the ExecMayReturnRawTuples and corresponding ExecFilterJunk needed at all? Or am I missing something? -- Andrew (irc:RhodiumToad) -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers