Skip to content

Latest commit

 

History

History
57 lines (51 loc) · 2.8 KB

output-explain-query-plan-in-different-formats.md

File metadata and controls

57 lines (51 loc) · 2.8 KB

Output Explain Query Plan In Different Formats

The output of an explain (or explain analyze) query plan for a given query defaults to a TEXT format that is meant to be read by a person.

> explain (analyze) select title from books where created_at > now() - '1 year'::interval;
                                           QUERY PLAN
-------------------------------------------------------------------------------------------------
 Seq Scan on books  (cost=0.00..1.28 rows=5 width=32) (actual time=0.011..0.017 rows=22 loops=1)
   Filter: (created_at > (now() - '1 year'::interval))
 Planning Time: 0.052 ms
 Execution Time: 0.027 ms
(4 rows)

If we instead want the query plan in a standardized format that is parseable and readable by a program, we can specify an alternate format like JSON, YAML, or XML.

Here is the same plan with format json:

> explain (analyze, format json) select title from books where created_at > now() - '1 year'::interval;
                           QUERY PLAN
----------------------------------------------------------------
 [                                                             +
   {                                                           +
     "Plan": {                                                 +
       "Node Type": "Seq Scan",                                +
       "Parallel Aware": false,                                +
       "Async Capable": false,                                 +
       "Relation Name": "books",                               +
       "Alias": "books",                                       +
       "Startup Cost": 0.00,                                   +
       "Total Cost": 1.28,                                     +
       "Plan Rows": 5,                                         +
       "Plan Width": 32,                                       +
       "Actual Startup Time": 0.008,                           +
       "Actual Total Time": 0.014,                             +
       "Actual Rows": 22,                                      +
       "Actual Loops": 1,                                      +
       "Filter": "(created_at > (now() - '1 year'::interval))",+
       "Rows Removed by Filter": 0                             +
     },                                                        +
     "Planning Time": 0.050,                                   +
     "Triggers": [                                             +
     ],                                                        +
     "Execution Time": 0.023                                   +
   }                                                           +
 ]
(1 row)

I present all four formats for a complex query plan in this Gist.