On Tue, Dec 3, 2019 at 6:45 AM Tom Lane <t...@sss.pgh.pa.us> wrote: > I wrote: > > Etsuro Fujita <etsuro.fuj...@gmail.com> writes: > >> On Mon, Dec 2, 2019 at 6:34 AM Tom Lane <t...@sss.pgh.pa.us> wrote: > >>> BTW, the existing code always schema-qualifies the relation names, > >>> on the rather lame grounds that it's producing the string without > >>> knowing whether EXPLAIN VERBOSE will be specified. In this code, > >>> the verbose flag is available so it would be trivial to make the > >>> output conform to EXPLAIN's normal policy. I didn't change that > >>> here because there'd be a bunch more test output diffs of no > >>> intellectual interest. Should we change it, or leave well enough > >>> alone? > > >> I think it would be better to keep that as-is because otherwise, in > >> case of a foreign join or aggregate, EXPLAIN without the VERBOSE > >> option won't show any information about foreign tables involved in > >> that foreign join or aggregate, which isn't useful for users. > > > No, I'm just talking about dropping the schema-qualification of table > > names when !es->verbose, not removing the Relations: output altogether. > > That would be more consistent with the rest of EXPLAIN's output.
Sorry, I misread the meaning. > Concretely, I'm thinking of the attached (on top of the other patch, > which I just pushed). This agrees exactly with what ExplainTargetRel > does for regular scans. Thanks for the patch! (The patch didn't apply to HEAD cleanly, though.) I like consistency, so +1 for the change. > One could make an argument that we should schema-qualify, regardless > of the "verbose" flag, if the output format isn't EXPLAIN_FORMAT_TEXT. > That would reduce the amount of variability that plan analysis tools > have to cope with. However, ExplainTargetRel itself doesn't provide > the schema in non-verbose mode. Maybe it should, ie we should change > it like > > case T_ModifyTable: > /* Assert it's on a real relation */ > Assert(rte->rtekind == RTE_RELATION); > objectname = get_rel_name(rte->relid); > - if (es->verbose) > + if (es->verbose || es->format != EXPLAIN_FORMAT_TEXT) > namespace = > get_namespace_name(get_rel_namespace(rte->relid)); > objecttag = "Relation Name"; > break; > > (and likewise for function schema names, a bit further down)? Seems like another issue to me. Best regards, Etsuro Fujita