On 2016/06/24 17:38, Ashutosh Bapat wrote: > On Fri, Jun 24, 2016 at 1:59 PM, Amit Langote wrote: >> I'm now starting to wonder if it would be outright wrong to just use the >> alias names of corresponding foreign tables directly for whole-row >> references? So, instead of these in target lists of remote queries: >> >> SELECT CASE WHEN (r1.*)::text IS NOT NULL THEN *ROW (r1.*)* END, ... > > This is wrong. The deparsed query looks like > SELECT CASE WHEN (r1.*)::text IS NOT NULL THEN *ROW (r1.col1, r1.col2, ...)* > END,
Yeah, I had noticed that in explain outputs (should have written like that). My point though is why we don't consider dropping the CASE WHEN ... END target list item solution in favor of simply using the alias name for a whole-row reference without affecting the correctness behavior wrt outer joins. Using CASE WHEN to emit the correct result has revealed its downside (this thread) although a simple whole-row reference would just work without any special consideration. > The reason for this is that the foreign table definition may not match the > target table definition. This has been explained in the comments that you > have deleted in your patch. Am I missing something? What may go wrong if we requested r1 (an alias name) in target list of the sent query instead of ROW(r1.col1, ...) for a whole-row reference in the original query? Fear of wrong set of data arriving or in wrong order or something like that? This part, I'm not quite sure about. Thanks, Amit -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers