Re: Add YAML option to explain - Mailing list pgsql-hackers

From daveg
Subject Re: Add YAML option to explain
Date
Msg-id 20090831200629.GR9321@sonic.net
Whole thread Raw
In response to Re: Add YAML option to explain  ("Greg Sabino Mullane" <greg@turnstep.com>)
List pgsql-hackers
On Mon, Aug 31, 2009 at 02:15:08PM -0000, Greg Sabino Mullane wrote:
> > Greg, can we see a few examples of the YAML output
> > compared to both json and text?
...
> greg=# explain (format json, analyze on) select * from pg_class where relname ~ 'x' order by 1,2,3;
>                         QUERY PLAN
> - -----------------------------------------------------------

An interesting property of json, it is almost exactly the same as python
data structure syntax. If I paste the following into python:

plan = [        {          "Plan": {            "Node Type": "Sort",            "Startup Cost": 12.82,
"TotalCost": 13.10,            "Plan Rows": 111,            "Plan Width": 185,            "Actual Startup Time": 1.152,
          "Actual Total Time": 1.373,            "Actual Rows": 105,            "Actual Loops": 1,            "Sort
Key":["relname", "relnamespace", "reltype"],            "Sort Method": "quicksort",            "Sort Space Used": 44,
        "Sort Space Type": "Memory",            "Plans": [              {                "Node Type": "Seq Scan",
        "Parent Relationship": "Outer",                "Relation Name": "pg_class",                "Alias": "pg_class",
              "Startup Cost": 0.00,                "Total Cost": 9.05,                "Plan Rows": 111,
"PlanWidth": 185,                "Actual Startup Time": 0.067,                "Actual Total Time": 0.817,
"Actual Rows": 105,                "Actual Loops": 1,                "Filter": "(relname ~ 'x'::text)"              }
        ]          },          "Triggers": [          ],          "Total Runtime": 1.649        }      ]
 

I get a python data structure. Which can be manipulated directly, or pretty
printed:

>>> import pprint
>>> pprint.pprint(plan)
[{'Plan': {'Actual Loops': 1,          'Actual Rows': 105,          'Actual Startup Time': 1.1519999999999999,
'ActualTotal Time': 1.373,          'Node Type': 'Sort',          'Plan Rows': 111,          'Plan Width': 185,
'Plans': [{'Actual Loops': 1,                     'Actual Rows': 105,                     'Actual Startup Time':
0.067000000000000004,                    'Actual Total Time': 0.81699999999999995,                     'Alias':
'pg_class',                    'Filter': "(relname ~ 'x'::text)",                     'Node Type': 'Seq Scan',
          'Parent Relationship': 'Outer',                     'Plan Rows': 111,                     'Plan Width': 185,
                  'Relation Name': 'pg_class',                     'Startup Cost': 0.0,                     'Total
Cost':9.0500000000000007}],          'Sort Key': ['relname', 'relnamespace', 'reltype'],          'Sort Method':
'quicksort',         'Sort Space Type': 'Memory',          'Sort Space Used': 44,          'Startup Cost': 12.82,
  'Total Cost': 13.1}, 'Total Runtime': 1.649, 'Triggers': []}]
 

I'm not sure if all json can be read this way, but the python and json
notations are very similar.

-dg

--
David Gould       daveg@sonic.net      510 536 1443    510 282 0869
If simplicity worked, the world would be overrun with insects.


pgsql-hackers by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: Linux LSB init script
Next
From: Peter Eisentraut
Date:
Subject: Re: \d+ for long view definitions?