machine-readable explain output

From: Robert Haas <robertmhaas(at)gmail(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: machine-readable explain output
Date: 2009-06-12 05:15:17
Message-ID: 603c8f070906112215qf2939d0mcf8497167f825b86@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Here we go, XML and JSON output.

You will need to apply explain_refactor-v4.patch and
explain_options-v2.patch first, then apply the two patches attached to
this message.

http://archives.postgresql.org/pgsql-hackers/2009-06/msg00865.php
http://archives.postgresql.org/pgsql-hackers/2009-06/msg00866.php

The infrastructure patch applies first and is separated only for ease
of reviewing. If the infrastructure patch applied by itself changes
any user-visible behavior, it's a bug. The main patch does all the
heavy lifting. The syntax is:

explain (format xml) ...
explain (format json, analyze) ...
explain (format text) ... -- same as just plain old explain

If you don't like the syntax, please argue about that on the "generic
explain options v2" thread. Let's try to use this thread to discuss
the output format, about which I spent a good deal of time agonizing.
I felt that it was important to keep the XML and JSON output as
similar to each other as possible. This has the fairly obvious
advantage of reducing code complexity and the somewhat less obvious
advantage of avoiding expressing information in ways that are overly
tied to the syntax of XML. I think the latter is actually a pretty
important point; it's hard to know that you've done something that's
actually generic unless you actually go through the exercise of making
it apply to two different cases. This code is obviously not
completely generic; I did consider the idea that Greg Stark proposed
of having some kind of ephemeral internal format with multiple output
converters, but I couldn't figure out a way to make it work. Still,
I've made a fairly determined effort to minimize the number of places
where we switch on the output format. It's still larger than I'd
like, but I don't have any good ideas for trimming it down further.

There is an argument to be made that machine-readable output formats
shouldn't be afraid to print information that isn't displayed in the
regular output, but I haven't gone very far down that road in this
patch. I lean toward the view that any additional information that
someone wants to have in the machine-readable format should also be an
available option for the text format, because I think the question of
WHAT you want to display and HOW you want to display it are largely
orthogonal (hence options are a separate patch, and this patch just
uses that infrastructure to implement an option for format). But
there may be some exceptions. At any rate, if it's possible, I would
like to get at least some of this work committed before I go too much
further with it, since this patch stack is already four layers deep
and my head may explode if it gets too much deeper.

If it's helpful to have any of these patches further decomposed for
reviewing purposes, see here, where they are broken out into
individual commits:

http://git.postgresql.org/gitweb?p=postgresql-rhaas.git;a=shortlog;h=refs/heads/explain_format

(It's probably a bad idea to clone this repository as I am updating
the patch set by rebasing, but it's useful for browsing.)

Comments appreciated...

...Robert

Attachment Content-Type Size
explain_format_infrastructure-v1.patch text/x-diff 36.9 KB
explain_format-v1.patch text/x-diff 52.5 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message John R Pierce 2009-06-12 08:01:55 Re: PostgreSQL installation
Previous Message Robert Haas 2009-06-12 04:41:24 generic explain options v2