PostgreSQL EXPLAIN Visualizer

Turn EXPLAIN ANALYZE JSON into a readable plan tree with timing, estimates and buffers

Input

Paste EXPLAIN (FORMAT JSON) output. psql output with QUERY PLAN header and + markers also works.

Up to 5 MB, analyzed in your browser and never saved.

Summary

Paste a PostgreSQL EXPLAIN plan

Run the command below, paste the JSON result on the left, or load an example.

Recommended command

EXPLAIN (
  ANALYZE,
  BUFFERS,
  SETTINGS,
  WAL,
  VERBOSE,
  FORMAT JSON
)
SELECT ...;

ANALYZE runs the statement. Wrap INSERT, UPDATE or DELETE in BEGIN and ROLLBACK.

Plan

The plan tree appears here after a valid plan is pasted.

Waiting for an EXPLAIN plan.

What it shows

PostgreSQL EXPLAIN Visualizer turns EXPLAIN (FORMAT JSON) output into a collapsible plan tree, a sortable node table and the formatted raw JSON. The summary shows execution and planning time, node count, the slowest node, the largest row estimate miss and shared read blocks. Select any node to see every field PostgreSQL reported for it.

How to capture a plan

Run EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL, VERBOSE, FORMAT JSON) followed by your query, then paste the result. psql output with the QUERY PLAN header, + continuation markers and the row-count footer is cleaned up automatically. ANALYZE executes the statement, so wrap INSERT, UPDATE and DELETE in BEGIN and ROLLBACK. Plans captured without ANALYZE still show costs and estimates, but time-based findings are skipped.

How metrics are derived

Total time is the actual time per loop multiplied by loops; below a Gather node it is divided by the number of processes so parallel work is not counted several times. Self time subtracts the children’s total time and is clamped at zero, so it is approximate for parallel plans, CTEs, InitPlans and SubPlans. The estimate factor compares actual and estimated rows per loop. Buffer counts in EXPLAIN include child nodes, so self values subtract the children. Block sizes assume the default 8 kB.

Findings and their limits

Findings are observations with numbers from the plan: large row estimate misses, Nested Loops with many inner executions, sequential scans that discard most rows, sorts and hashes that spill to disk, temporary files, reads from outside shared buffers and nodes that dominate execution time. The suggestions are cautious and never name a specific index to create, because the plan alone cannot show query frequency, write load or data distribution.

Privacy

Plans can expose table names, schema names, predicates and literal values. The plan is parsed in your browser, large plans in a Web Worker, and it is never uploaded, logged or stored. Only the selected view (Tree, Table or Raw) is remembered.

CodingTool is officially live on

Launched on StartupBaseCodingTool.dev - Free, Fast & Easy Developer Tools in One Place | Product HuntCodingTool - Featured on Startup FameFazier badgeListed on Turbo0Featured on Twelve ToolsFeatured on Findly.toolsLaunchpadly Startup DirectoryCodingTool.dev — Featured on Smol Launch