Re: Understanding EXPLAIN ANALYZE output - Mailing list pgsql-general

From Michael Fuhr
Subject Re: Understanding EXPLAIN ANALYZE output
Date
Msg-id 20050210224847.GA92318@winnie.fuhr.org
Whole thread Raw
In response to Re: Understanding EXPLAIN ANALYZE output  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Understanding EXPLAIN ANALYZE output
List pgsql-general
On Thu, Feb 10, 2005 at 03:38:05PM -0500, Tom Lane wrote:
> Michael Fuhr <mike@fuhr.org> writes:
>
> > Any suggestions for the meantime?
>
> Update to CVS tip ;-)

Done.  Below is a simple proof of concept for an explain() function
in PL/pgSQL.  It's not necessarily correct -- it just shows what
could be done.

CREATE TYPE explain_in AS (
    exp  text
);

CREATE TYPE explain_out AS (
    pname         text,
    startup_cost  numeric(12,2),
    total_cost    numeric(12,2),
    plan_rows     integer,
    plan_width    integer
);

CREATE FUNCTION explain(query text) RETURNS SETOF explain_out AS $$
DECLARE
    row  explain_in;
    ret  explain_out;
BEGIN
    FOR row IN EXECUTE 'EXPLAIN ' || query LOOP
    ret.pname        := substring(row.exp FROM '([^\\(]+) \\(');
    ret.startup_cost := substring(row.exp FROM 'cost=(\\d+\\.\\d+)');
    ret.total_cost   := substring(row.exp FROM '\\.\\.(\\d+\\.\\d+) rows');
    ret.plan_rows    := substring(row.exp FROM ' rows=([[:digit:]]+)');
    ret.plan_width   := substring(row.exp FROM ' width=([[:digit:]]+)');

    IF ret.plan_rows IS NOT NULL THEN
        RETURN NEXT ret;
    END IF;
    END LOOP;

    RETURN;
END;
$$ LANGUAGE plpgsql VOLATILE STRICT;

SELECT * FROM explain('SELECT count(*) FROM pg_class');
            pname            | startup_cost | total_cost | plan_rows | plan_width
-----------------------------+--------------+------------+-----------+------------
 Aggregate                   |        26.69 |      26.69 |         1 |          0
   ->  Seq Scan on pg_class  |         0.00 |      24.95 |       695 |          0
(2 rows)

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

pgsql-general by date:

Previous
From: Harald Fuchs
Date:
Subject: Re: Understanding EXPLAIN ANALYZE output
Next
From: Michael Fuhr
Date:
Subject: Re: Catching delete