Re: explain output infelicity in psql

From: Robert Haas <robertmhaas(at)gmail(dot)com>
To: Andrew Dunstan <andrew(at)dunslane(dot)net>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: explain output infelicity in psql
Date: 2009-12-09 21:06:08
Message-ID: 603c8f070912091306r6dd1f3efh6dd72ac9bda205f@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, Dec 9, 2009 at 2:37 PM, Andrew Dunstan <andrew(at)dunslane(dot)net> wrote:
>
> I have just noticed while checking the EXPLAIN YAML patch that the non-text
> explain formats are output as a single line with embedded line feeds, while
> the text format is delivered as a set of text records, one per line. The
> practical effect of this is that psql decorates the non-text format output
> with continuation characters:
>
>   andrew=# explain select count(*) from pg_class where relname ~ 'pg_';
>                              QUERY PLAN
> ----------------------------------------------------------------
>    Aggregate  (cost=9.67..9.68 rows=1 width=0)
>      ->  Seq Scan on pg_class  (cost=0.00..9.16 rows=204 width=0)
>            Filter: (relname ~ 'pg_'::text)
>   (3 rows)
>
>   Time: 5.813 ms
>   andrew=# explain (format yaml) select count(*) from pg_class where
>   relname ~ 'pg_';
>                  QUERY PLAN
> -----------------------------------------
>     - Plan:                               +
>        Node Type: Aggregate               +
>        Strategy: Plain                    +
>        Startup Cost: 9.67                 +
>        Total Cost: 9.68                   +
>        Plan Rows: 1                       +
>        Plan Width: 0                      +
>        Plans:                             +
>          - Node Type: Seq Scan            +
>            Parent Relationship: Outer     +
>            Relation Name: pg_class        +
>            Alias: pg_class                +
>            Startup Cost: 0.00             +
>            Total Cost: 9.16               +
>            Plan Rows: 204                 +
>            Plan Width: 0                  +
>            Filter: (relname ~ 'pg_'::text)
>   (1 row)
>
> Those + chars at the end of the line are ugly, to say the least, and they
> make the supposedly machine-readable formats not so machine readable if
> anyone wanted to c&p the output into a parser. (I'm mildly surprised this
> hasn't been noticed before).
>
> Maybe we need to teach psql not to do this formatting for EXPLAIN output?

Oh, dear. I think that line continuation syntax was recently added -
subsequent to the machine-readable EXPLAIN patch. The reason why it's
coded to emit everything as a single row is because that will be most
convenient for programs that are sucking down this data
programatically. Otherwise, they'll have to concatenate all the lines
that are returned.

And in fact for XML format, it's even worse: the data is returned as
type xml, but that obviously won't fly if we return each line as a
separate tuple.

On first blush, I'm inclined to suggest that the addition of + signs
to mark continuation lines is a misfeature.

...Robert

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Chris Browne 2009-12-09 21:23:05 Has anyone used CLANG yet?
Previous Message Roman Kononov 2009-12-09 20:06:19 BUG #5237: strange int->bit and bit->int conversions