SET pg_stat_statements.track_utility = TRUE; SELECT pg_stat_statements_reset() ISNOTNULLAS t;
-- DO block - top-level tracking. CREATETABLE stats_track_tab (x int); SET pg_stat_statements.track = 'top'; DELETEFROM stats_track_tab;
DO $$
BEGIN DELETEFROM stats_track_tab;
END;
$$ LANGUAGE plpgsql; SELECT toplevel, calls, query FROM pg_stat_statements WHERE query LIKE'%DELETE%'ORDERBY query COLLATE"C", toplevel; SELECT pg_stat_statements_reset() ISNOTNULLAS t;
-- DO block - all-level tracking. SET pg_stat_statements.track = 'all'; DELETEFROM stats_track_tab;
DO $$
BEGIN DELETEFROM stats_track_tab;
END; $$;
DO LANGUAGE plpgsql $$
BEGIN -- this is a SELECT
PERFORM 'hello world'::TEXT;
END; $$; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C", toplevel;
-- Procedure with multiple utility statements. CREATEORREPLACEPROCEDURE proc_with_utility_stmt()
LANGUAGE SQL AS $$ SHOW pg_stat_statements.track; show pg_stat_statements.track; SHOW pg_stat_statements.track_utility;
$$; SET pg_stat_statements.track_utility = TRUE; -- all-level tracking. SET pg_stat_statements.track = 'all'; SELECT pg_stat_statements_reset() ISNOTNULLAS t; CALL proc_with_utility_stmt(); SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C", toplevel; -- top-level tracking. SET pg_stat_statements.track = 'top'; SELECT pg_stat_statements_reset() ISNOTNULLAS t; CALL proc_with_utility_stmt(); SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C", toplevel;
-- EXPLAIN - all-level tracking. CREATETABLE test_table (x int); SET pg_stat_statements.track = 'all'; SELECT pg_stat_statements_reset() ISNOTNULLAS t; EXPLAIN (COSTS OFF) SELECT1; EXPLAIN (COSTS OFF) (SELECT1, 2); EXPLAIN (COSTS OFF) TABLE stats_track_tab; EXPLAIN (COSTS OFF) (TABLE test_table); EXPLAIN (COSTS OFF) VALUES (1); EXPLAIN (COSTS OFF) (VALUES (1, 2)); EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = 1WHERE x = 1; EXPLAIN (COSTS OFF) DELETEFROM stats_track_tab; EXPLAIN (COSTS OFF) INSERTINTO stats_track_tab VALUES ((1)); EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab USING (SELECT id FROM generate_series(1, 10) id) ON x = id WHEN MATCHED THENUPDATESET x = id WHENNOT MATCHED THENINSERT (x) VALUES (id); EXPLAIN (COSTS OFF) SELECT1UNIONSELECT2; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- EXPLAIN - top-level tracking. SET pg_stat_statements.track = 'top'; SELECT pg_stat_statements_reset() ISNOTNULLAS t; EXPLAIN (COSTS OFF) SELECT1; EXPLAIN (COSTS OFF) (SELECT1, 2); EXPLAIN (COSTS OFF) TABLE stats_track_tab; EXPLAIN (COSTS OFF) (TABLE test_table); EXPLAIN (COSTS OFF) VALUES (1); EXPLAIN (COSTS OFF) (VALUES (1, 2)); EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = 1WHERE x = 1; EXPLAIN (COSTS OFF) DELETEFROM stats_track_tab; EXPLAIN (COSTS OFF) INSERTINTO stats_track_tab VALUES ((1)); EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab USING (SELECT id FROM generate_series(1, 10) id) ON x = id WHEN MATCHED THENUPDATESET x = id WHENNOT MATCHED THENINSERT (x) VALUES (id); EXPLAIN (COSTS OFF) SELECT1UNIONSELECT2; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- EXPLAIN - all-level tracking with multi-statement strings. SET pg_stat_statements.track = 'all'; SELECT pg_stat_statements_reset() ISNOTNULLAS t; -- SELECT queries EXPLAIN (COSTS OFF) SELECT1\; EXPLAIN (COSTS OFF) SELECT1, 2; EXPLAIN (COSTS OFF) (SELECT1, 2, 3)\; EXPLAIN (COSTS OFF) (SELECT1, 2, 3, 4); EXPLAIN (COSTS OFF) SELECT1, 2UNIONSELECT3, 4\; EXPLAIN (COSTS OFF) (SELECT1, 2, 3) UNIONSELECT3, 4, 5; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C"; SELECT pg_stat_statements_reset() ISNOTNULLAS t; -- Most DMLs EXPLAIN (COSTS OFF) TABLE stats_track_tab\; EXPLAIN (COSTS OFF) (TABLE test_table); EXPLAIN (COSTS OFF) VALUES (1)\; EXPLAIN (COSTS OFF) (VALUES (1, 2)); EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = 1WHERE x = 1\; EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = 1; EXPLAIN (COSTS OFF) DELETEFROM stats_track_tab\; EXPLAIN (COSTS OFF) DELETEFROM stats_track_tab WHERE x = 1; EXPLAIN (COSTS OFF) INSERTINTO stats_track_tab VALUES ((1))\; EXPLAIN (COSTS OFF) INSERTINTO stats_track_tab VALUES (1), (2); SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C"; SELECT pg_stat_statements_reset() ISNOTNULLAS t; -- MERGE, worth its own. EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab USING (SELECT id FROM generate_series(1, 10) id) ON x = id WHEN MATCHED THENUPDATESET x = id WHENNOT MATCHED THENINSERT (x) VALUES (id)\; EXPLAIN (COSTS OFF) SELECT1, 2, 3, 4, 5; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- EXPLAIN - top-level tracking with multi-statement strings. SET pg_stat_statements.track = 'top'; SELECT pg_stat_statements_reset() ISNOTNULLAS t; EXPLAIN (COSTS OFF) SELECT1\; EXPLAIN (COSTS OFF) SELECT1, 2; EXPLAIN (COSTS OFF) (SELECT1, 2, 3)\; EXPLAIN (COSTS OFF) (SELECT1, 2, 3, 4); EXPLAIN (COSTS OFF) TABLE stats_track_tab\; EXPLAIN (COSTS OFF) (TABLE test_table); EXPLAIN (COSTS OFF) VALUES (1)\; EXPLAIN (COSTS OFF) (VALUES (1, 2)); EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = 1WHERE x = 1\; EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = 1; EXPLAIN (COSTS OFF) DELETEFROM stats_track_tab\; EXPLAIN (COSTS OFF) DELETEFROM stats_track_tab WHERE x = 1; EXPLAIN (COSTS OFF) INSERTINTO stats_track_tab VALUES ((1))\; EXPLAIN (COSTS OFF) INSERTINTO stats_track_tab VALUES ((1), (2)); EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab USING (SELECT id FROM generate_series(1, 10) id) ON x = id WHEN MATCHED THENUPDATESET x = id WHENNOT MATCHED THENINSERT (x) VALUES (id)\; EXPLAIN (COSTS OFF) SELECT1, 2, 3, 4, 5; EXPLAIN (COSTS OFF) SELECT1, 2UNIONSELECT3, 4\; EXPLAIN (COSTS OFF) (SELECT1, 2, 3) UNIONSELECT3, 4, 5; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- EXPLAIN with CTEs - all-level tracking SET pg_stat_statements.track = 'all'; SELECT pg_stat_statements_reset() ISNOTNULLAS t; EXPLAIN (COSTS OFF) WITH a AS (SELECT4) SELECT1; EXPLAIN (COSTS OFF) (WITH a AS (SELECT4) (SELECT1, 2)); EXPLAIN (COSTS OFF) WITH a AS (SELECT4) UPDATE stats_track_tab SET x = 1WHERE x = 1; EXPLAIN (COSTS OFF) WITH a AS (SELECT4) DELETEFROM stats_track_tab; EXPLAIN (COSTS OFF) WITH a AS (SELECT4) INSERTINTO stats_track_tab VALUES ((1)); EXPLAIN (COSTS OFF) WITH a AS (SELECT4) MERGE INTO stats_track_tab USING (SELECT id FROM generate_series(1, 10) id) ON x = id WHEN MATCHED THENUPDATESET x = id WHENNOT MATCHED THENINSERT (x) VALUES (id); EXPLAIN (COSTS OFF) WITH a AS (select4) SELECT1UNIONSELECT2; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- EXPLAIN with CTEs - top-level tracking SET pg_stat_statements.track = 'top'; SELECT pg_stat_statements_reset() ISNOTNULLAS t; EXPLAIN (COSTS OFF) WITH a AS (SELECT4) SELECT1; EXPLAIN (COSTS OFF) (WITH a AS (SELECT4) (SELECT1, 2)); EXPLAIN (COSTS OFF) WITH a AS (SELECT4) UPDATE stats_track_tab SET x = 1WHERE x = 1; EXPLAIN (COSTS OFF) WITH a AS (SELECT4) DELETEFROM stats_track_tab; EXPLAIN (COSTS OFF) WITH a AS (SELECT4) INSERTINTO stats_track_tab VALUES ((1)); EXPLAIN (COSTS OFF) WITH a AS (SELECT4) MERGE INTO stats_track_tab USING (SELECT id FROM generate_series(1, 10) id) ON x = id WHEN MATCHED THENUPDATESET x = id WHENNOT MATCHED THENINSERT (x) VALUES (id); EXPLAIN (COSTS OFF) WITH a AS (select4) SELECT1UNIONSELECT2; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- EXPLAIN with CREATE TABLE AS - all-level tracking. SET pg_stat_statements.track = 'all'; SELECT pg_stat_statements_reset() ISNOTNULLAS t; EXPLAIN (COSTS OFF) CREATE TEMPORARY TABLE pgss_explain_ctas ASSELECT1; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- EXPLAIN with CREATE TABLE AS - top-level tracking. SET pg_stat_statements.track = 'top'; SELECT pg_stat_statements_reset() ISNOTNULLAS t; EXPLAIN (COSTS OFF) CREATE TEMPORARY TABLE pgss_explain_ctas ASSELECT1; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- DECLARE CURSOR, all-level tracking. SET pg_stat_statements.track = 'all'; SELECT pg_stat_statements_reset() ISNOTNULLAS t;
BEGIN; DECLARE FOOCUR CURSORFORSELECT * from stats_track_tab; FETCH FORWARD 1FROM foocur;
CLOSE foocur; COMMIT; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- DECLARE CURSOR, top-level tracking. SET pg_stat_statements.track = 'top'; SELECT pg_stat_statements_reset() ISNOTNULLAS t;
BEGIN; DECLARE FOOCUR CURSORFORSELECT * FROM stats_track_tab; FETCH FORWARD 1FROM foocur;
CLOSE foocur; COMMIT; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- COPY - all-level tracking. SET pg_stat_statements.track = 'all'; SELECT pg_stat_statements_reset() ISNOTNULLAS t;
COPY (SELECT1) TO stdout;
COPY (SELECT1UNIONSELECT2) TO stdout;
COPY (MERGE INTO stats_track_tab USING (SELECT1 id) ON x = id WHEN MATCHED THENUPDATESET x = id WHENNOT MATCHED THENINSERT (x) VALUES (id) RETURNING x) TO stdout;
COPY (INSERTINTO stats_track_tab (x) VALUES (1) RETURNING x) TO stdout;
COPY (UPDATE stats_track_tab SET x = 2WHERE x = 1 RETURNING x) TO stdout;
COPY (DELETEFROM stats_track_tab WHERE x = 2 RETURNING x) TO stdout; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- COPY - top-level tracking. SET pg_stat_statements.track = 'top'; SELECT pg_stat_statements_reset() ISNOTNULLAS t;
COPY (SELECT1) TO stdout;
COPY (SELECT1UNIONSELECT2) TO stdout;
COPY (MERGE INTO stats_track_tab USING (SELECT1 id) ON x = id WHEN MATCHED THENUPDATESET x = id WHENNOT MATCHED THENINSERT (x) VALUES (id) RETURNING x) TO stdout;
COPY (INSERTINTO stats_track_tab (x) VALUES (1) RETURNING x) TO stdout;
COPY (UPDATE stats_track_tab SET x = 2WHERE x = 1 RETURNING x) TO stdout;
COPY (DELETEFROM stats_track_tab WHERE x = 2 RETURNING x) TO stdout; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- DO block - top-level tracking without utility. SET pg_stat_statements.track = 'top'; SET pg_stat_statements.track_utility = FALSE; SELECT pg_stat_statements_reset() ISNOTNULLAS t; DELETEFROM stats_track_tab;
DO $$
BEGIN DELETEFROM stats_track_tab;
END; $$;
DO LANGUAGE plpgsql $$
BEGIN -- this is a SELECT
PERFORM 'hello world'::TEXT;
END; $$; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C", toplevel;
-- DO block - all-level tracking without utility. SET pg_stat_statements.track = 'all'; SELECT pg_stat_statements_reset() ISNOTNULLAS t; DELETEFROM stats_track_tab;
DO $$
BEGIN DELETEFROM stats_track_tab;
END; $$;
DO LANGUAGE plpgsql $$
BEGIN -- this is a SELECT
PERFORM 'hello world'::TEXT;
END; $$; SELECT toplevel, calls, query FROM pg_stat_statements ORDERBY query COLLATE"C", toplevel;
-- DO block --- multiple inner queries with separators SET pg_stat_statements.track = 'all'; SET pg_stat_statements.track_utility = TRUE; CREATETABLE pgss_do_util_tab_1 (a int); CREATETABLE pgss_do_util_tab_2 (a int); SELECT pg_stat_statements_reset() ISNOTNULLAS t;
DO $$ DECLARE BEGIN
EXECUTE 'CREATE TABLE pgss_do_table (id INT); DROP TABLE pgss_do_table';
EXECUTE 'SELECT a FROM pgss_do_util_tab_1; SELECT a FROM pgss_do_util_tab_2';
END $$; SELECT toplevel, calls, rows, query FROM pg_stat_statements WHERE toplevel ISFALSE ORDERBY query COLLATE"C"; SELECT pg_stat_statements_reset() ISNOTNULLAS t; -- Note the extra semicolon at the end of the query.
DO $$ DECLARE BEGIN
EXECUTE 'CREATE TABLE pgss_do_table (id INT); DROP TABLE pgss_do_table;';
EXECUTE 'SELECT a FROM pgss_do_util_tab_1; SELECT a FROM pgss_do_util_tab_2;';
END $$; SELECT toplevel, calls, rows, query FROM pg_stat_statements WHERE toplevel ISFALSE ORDERBY query COLLATE"C"; DROPTABLE pgss_do_util_tab_1, pgss_do_util_tab_2;
-- PL/pgSQL function - top-level tracking. SET pg_stat_statements.track = 'top'; SET pg_stat_statements.track_utility = FALSE; SELECT pg_stat_statements_reset() ISNOTNULLAS t; CREATE FUNCTION PLUS_TWO(i INTEGER) RETURNS INTEGERAS $$ DECLARE
r INTEGER;
BEGIN SELECT (i + 1 + 1.0)::INTEGERINTO r; RETURN r;
END; $$ LANGUAGE plpgsql;
SELECT PLUS_TWO(3); SELECT PLUS_TWO(7);
-- SQL function --- use LIMIT to keep it from being inlined CREATE FUNCTION PLUS_ONE(i INTEGER) RETURNS INTEGERAS
$$ SELECT (i + 1.0)::INTEGERLIMIT1 $$ LANGUAGE SQL;
SELECT PLUS_ONE(8); SELECT PLUS_ONE(10);
SELECT calls, rows, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- immutable SQL function --- can be executed at plan time CREATE FUNCTION PLUS_THREE(i INTEGER) RETURNS INTEGERAS
$$ SELECT i + 3LIMIT1 $$ IMMUTABLE LANGUAGE SQL;
SELECT PLUS_THREE(8); SELECT PLUS_THREE(10);
SELECT toplevel, calls, rows, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- PL/pgSQL function - all-level tracking. SET pg_stat_statements.track = 'all'; SELECT pg_stat_statements_reset() ISNOTNULLAS t;
-- we drop and recreate the functions to avoid any caching funnies DROP FUNCTION PLUS_ONE(INTEGER); DROP FUNCTION PLUS_TWO(INTEGER); DROP FUNCTION PLUS_THREE(INTEGER);
-- PL/pgSQL function CREATE FUNCTION PLUS_TWO(i INTEGER) RETURNS INTEGERAS $$ DECLARE
r INTEGER;
BEGIN SELECT (i + 1 + 1.0)::INTEGERINTO r; RETURN r;
END; $$ LANGUAGE plpgsql;
SELECT PLUS_TWO(-1); SELECT PLUS_TWO(2);
-- SQL function --- use LIMIT to keep it from being inlined CREATE FUNCTION PLUS_ONE(i INTEGER) RETURNS INTEGERAS
$$ SELECT (i + 1.0)::INTEGERLIMIT1 $$ LANGUAGE SQL;
SELECT PLUS_ONE(3); SELECT PLUS_ONE(1);
SELECT calls, rows, query FROM pg_stat_statements ORDERBY query COLLATE"C";
-- immutable SQL function --- can be executed at plan time CREATE FUNCTION PLUS_THREE(i INTEGER) RETURNS INTEGERAS
$$ SELECT i + 3LIMIT1 $$ IMMUTABLE LANGUAGE SQL;
SELECT PLUS_THREE(8); SELECT PLUS_THREE(10);
SELECT toplevel, calls, rows, query FROM pg_stat_statements ORDERBY query COLLATE"C";
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.