एम्बेड करने में कोई समस्या नहीं है EXPLAIN
पीएल/पीजीएसक्यूएल में:
CREATE OR REPLACE FUNCTION profile(
IN query text,
OUT total_cost double precision,
OUT runtime double precision
) RETURNS record
LANGUAGE plpgsql STRICT AS
$$DECLARE
j json;
BEGIN
EXECUTE 'EXPLAIN (ANALYZE, FORMAT JSON) ' || query INTO j;
total_cost := (j->0->'Plan'->>'Total Cost')::double precision;
runtime := (j->0->'Plan'->>'Actual Total Time')::double precision;
RETURN;
END;$$;
उदाहरण के लिए आप इसका उपयोग इस प्रकार कर सकते हैं:
test=> SELECT * FROM profile($$SELECT * FROM large WHERE val = 'mama'$$);
┌────────────┬─────────┐
│ total_cost │ runtime │
├────────────┼─────────┤
│ 14542.43 │ 207.836 │
└────────────┴─────────┘
(1 row)
अविश्वसनीय प्रश्नों के साथ इसका उपयोग न करें, क्योंकि फ़ंक्शन SQL इंजेक्शन के लिए असुरक्षित है।