Re: [HACKERS] Anyone for prettyprinted EXPLAIN VERBOSE? - Mailing list pgsql-hackers

From wieck@debis.com (Jan Wieck)
Subject Re: [HACKERS] Anyone for prettyprinted EXPLAIN VERBOSE?
Date
Msg-id m11z8xs-0003kKC@orion.SAPserv.Hamburg.dsh.de
Whole thread Raw
In response to Re: [HACKERS] Anyone for prettyprinted EXPLAIN VERBOSE?  (Bruce Momjian <pgman@candle.pha.pa.us>)
Responses Re: [HACKERS] Anyone for prettyprinted EXPLAIN VERBOSE?
Re: [HACKERS] Anyone for prettyprinted EXPLAIN VERBOSE?
Re: [HACKERS] Anyone for prettyprinted EXPLAIN VERBOSE?
List pgsql-hackers
Bruce Momjian wrote:

> I remember Jan saying he liked the compressed one.

    Change it if you want to.

    The  reason why I prefer the nodeToString() format is bacause
    (even if it might look like garbage to someone) for  me  it's
    the  only  way to LOOK if the right node went from the parsed
    state  into  the  rewritten  state.  Or  if  an  OLD/NEW  got
    rewritten  correctly  into  the  scan  relation's/TLE's  one.
    That's impossible if having the prettyprint only, because for
    non-trivial   trees   the  output  occurs  hundreds  (if  not
    thousands) of lines later, especially if  multi-action  rules
    or  subselects  get involved. Not to tell about recursive and
    conditional rules  getting  applied  (note  that  conditional
    instead  rules  put  out two trees, one with the negated rule
    qual and the original action, one  with  the  original  rules
    qual  and action). To compare in such a case, if anything was
    done well, really requires to  look  at  rewriter  input  AND
    output.

    I  have  a  scrollback buffer of 2000 lines on my XTerm icon,
    and it already happened that I wasn't able to scroll back  to
    the wanted location WHILE USING COMPRESSED FORMAT ONLY!

    But  if  we  get  our  hands on the parsetree overhaul, I can
    insert my own "printf(...nodeToString())" statements into the
    places,  where  I  really  need  to  look  at. That's usually
    another place, than these messages are coming from.

    I'm only in doubt about if anyone at all DOES use the  pretty
    printed  version  for  anything.  I assume I'm not too bad in
    reading printed parsetrees, but whenever the  pretty  printed
    tree  exceeds some hundreds of lines, I'm totally lost and am
    unable to find the location I'm looking for (what I easily do
    when  looking  at  the compressed format). I allways wondered
    why the pretty print was implemented at all.

    Who really USES the explanative format  to  debug  things  on
    non-trivial queries?

    Since Tom is asking, I assume at least he's the one who does.
    But then again, he must be able to  see  his  target  station
    expressed  in some Expr-, Oper- and Func- nodes while pushing
    the buttons to get an underground-ticket. So  who  else  does
    like  the  pretty  printed  version better for non-esthetical
    reasons?


Jan

>
>
> > When you do an EXPLAIN VERBOSE, two different representations of the
> > query plan are produced.  The client sees something like this:
> >
> > regression=> explain verbose select sum(f1) from int4_tbl;
> > NOTICE:  QUERY DUMP:
> >
> > { AGG :cost 1.165 :size 5 :width 4 :state <> :qptargetlist ({ TARGETENTRY :resdom { RESDOM :resno 1 :restype 23
:restypmod-1 :resname "sum" :reskey 0 :reskeyop 0 :ressortgroupref 0 :resjunk false } :expr { AGGREG :aggname sum
:basetype23 :aggtype 23 :target { VAR :varno 0 :varattno 1 :vartype 23 :vartypmod -1  :varlevelsup 0 :varnoold 1
:varoattno1} :usenulls false }}) :qpqual <> :lefttree { SEQSCAN :cost 1.165 :size 5 :width 4 :state <> :qptargetlist ({
TARGETENTRY:resdom { RESDOM :resno 1 :restype 23 :restypmod -1 :resname "<>" :reskey 0 :reskeyop 0 :ressortgroupref 0
:resjunkfalse } :expr { VAR :varno 1 :varattno 1 :vartype 23 :vartypmod -1  :varlevelsup 0 :varnoold 1 :varoattno 1}})
:qpqual<> :lefttree <> :righttree <> :extprm () :locprm () :initplan <> :nprm 0  :scanrelid 1 } :righttree <> :extprm
():locprm () :initplan <> :nprm 0 } 
> >
> > but in the postmaster log we format it like this:
> >
> > NOTICE:  QUERY PLAN:
> >
> > Aggregate  (cost=1.16 rows=5 width=4)
> >   ->  Seq Scan on int4_tbl  (cost=1.16 rows=5 width=4)
> >
> > { AGG
> >    :cost 1.165
> >    :size 5
> >    :width 4
> >    :state <>
> >    :qptargetlist (
> >       { TARGETENTRY
> >       :resdom
> >          { RESDOM
> >          :resno 1
> >
> > [...]
> >
> >    :righttree <>
> >    :extprm ()
> >
> >    :locprm ()
> >
> >    :initplan <>
> >    :nprm 0
> >    }
> >
> > Does anyone think that the first form has any conceivable use?  I would
> > like to get rid of it and deliver the prettyprinted format to both log
> > and client.  I think it may have been done this way because old versions
> > of the backend didn't cope very gracefully with sending long NOTICE
> > messages to the client, but that constraint is history...


--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#========================================= wieck@debis.com (Jan Wieck) #

pgsql-hackers by date:

Previous
From: Jeroen van Vianen
Date:
Subject: ctags problem
Next
From: Jeroen van Vianen
Date:
Subject: SIGSEGV in initdb