diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/select.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/select.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/select.out 2026-05-19 05:57:58.290059000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/select.out 2026-05-19 06:02:44.918741000 +0000 @@ -206,31 +206,9 @@ DEALLOCATE pgss_test; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+------------------------------------------------------------------------------ - 1 | 1 | PREPARE pgss_test (int) AS SELECT $1, $2 LIMIT $3 - 4 | 4 | SELECT $1 + - | | -- but this one will appear + - | | AS "text" - 2 | 2 | SELECT $1 + $2 - 3 | 3 | SELECT $1 + $2 + $3 AS "add" - 1 | 1 | SELECT $1 AS "float" - 2 | 2 | SELECT $1 AS "int" - 2 | 2 | SELECT $1 AS "int" LIMIT $2 - 2 | 0 | SELECT $1 AS "int" OFFSET $2 - 6 | 0 | SELECT $1 AS "int" OFFSET $2 LIMIT $3 - 2 | 2 | SELECT $1 AS "int" ORDER BY 1 - 1 | 2 | SELECT $1 AS i UNION SELECT $2 ORDER BY i - 1 | 1 | SELECT $1 || $2 - 2 | 2 | SELECT DISTINCT $1 AS "int" - 0 | 0 | SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C" - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - 1 | 2 | WITH t(f) AS ( + - | | VALUES ($1), ($2) + - | | ) + - | | SELECT f FROM t ORDER BY f - 1 | 1 | select $1::jsonb ? $2 -(17 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -259,13 +237,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -------------------------------------------------------------------------+------- - SELECT WHERE $1 IN ($2::int, $3::int::text) | 1 - SELECT WHERE ($1, $2) IN (($3, $4), ($5, $6)) | 2 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 - SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C" | 0 -(4 rows) + query | calls +-------+------- +(0 rows) -- with the last element being an explicit function call with an argument, ensure -- the normalization of the squashing interval is correct. @@ -290,12 +264,9 @@ (1 row) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -------------------------------------------------------------------------+------- - SELECT WHERE $1 IN ($2 /*, ... */) | 2 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 - SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C" | 0 -(3 rows) + query | calls +-------+------- +(0 rows) -- -- queries with locking clauses @@ -368,21 +339,9 @@ (0 rows) SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | query --------+------------------------------------------------------------------------------------------ - 1 | SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id - 1 | SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR KEY SHARE - 1 | SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR NO KEY UPDATE - 1 | SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR SHARE - 2 | SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR UPDATE - 1 | SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR UPDATE NOWAIT - 1 | SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR UPDATE OF pgss_a - 1 | SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR UPDATE OF pgss_b - 1 | SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR UPDATE OF pgss_b, pgss_a - 1 | SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR UPDATE SKIP LOCKED - 0 | SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C" - 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(12 rows) + calls | query +-------+------- +(0 rows) DROP TABLE pgss_a, pgss_b CASCADE; -- @@ -418,7 +377,7 @@ SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%FROM%tbl_inh%'; count ------- - 2 + 0 (1 row) -- WITH TIES @@ -456,7 +415,7 @@ SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%FETCH FIRST%'; count ------- - 2 + 0 (1 row) -- GROUP BY, HAVING, GROUPING @@ -539,21 +498,9 @@ (1 row) SELECT calls, query FROM pg_stat_statements WHERE query LIKE '%GROUP BY%' ORDER BY query COLLATE "C"; - calls | query --------+------------------------------------------------------------------------------------------- - 1 | SELECT COUNT(*) FROM (VALUES ($1::INT, $2::INT)) AS t(a, b) GROUP BY GROUPING SETS(a, ()) - 1 | SELECT COUNT(*) FROM (VALUES ($1::INT, $2::INT)) AS t(a, b) GROUP BY GROUPING SETS(b, ()) - 1 | SELECT COUNT(*) FROM (VALUES ($1::INT, $2::INT)) AS t(a, b) GROUP BY a - 2 | SELECT COUNT(*) FROM (VALUES ($1::INT, $2::INT)) AS t(a, b) GROUP BY a HAVING a = $3 - 1 | SELECT COUNT(*) FROM (VALUES ($1::INT, $2::INT)) AS t(a, b) GROUP BY a, b - 1 | SELECT COUNT(*) FROM (VALUES ($1::INT, $2::INT)) AS t(a, b) GROUP BY b - 1 | SELECT COUNT(*) FROM (VALUES ($1::INT, $2::INT)) AS t(a, b) GROUP BY b HAVING b = $3 - 1 | SELECT COUNT(*) FROM (VALUES ($1::INT, $2::INT)) AS t(a, b) GROUP BY b, a - 1 | SELECT GROUPING(a) FROM (VALUES ($1::INT, $2::INT)) AS t(a, b) GROUP BY a - 1 | SELECT GROUPING(b) FROM (VALUES ($1::INT, $2::INT)) AS t(a, b) GROUP BY a, b - 1 | SELECT GROUPING(b) FROM (VALUES ($1::INT, $2::INT)) AS t(a, b) GROUP BY b - 1 | SELECT GROUPING(b) FROM (VALUES ($1::INT, $2::INT)) AS t(a, b) GROUP BY b, a -(12 rows) + calls | query +-------+------- +(0 rows) -- GROUP BY [DISTINCT] SELECT a, b, c @@ -613,7 +560,7 @@ SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%GROUP BY%ROLLUP%'; count ------- - 2 + 0 (1 row) -- GROUPING SET agglevelsup @@ -644,7 +591,7 @@ SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%SELECT GROUPING%'; count ------- - 6 + 4 (1 row) SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -671,12 +618,9 @@ COMMIT; SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | query --------+------------------------------------------------------------------------ - 2 | SELECT * FROM temp_t - 0 | SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C" - 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(3 rows) + calls | query +-------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -860,17 +804,9 @@ (0 rows) SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | query --------+------------------------------------------------------------------------ - 8 | SELECT a FROM tab_search_diff_2 - 4 | SELECT a FROM tab_search_diff_2 AS t1 - 4 | SELECT a, b FROM tab_search_same - 0 | SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C" - 4 | SELECT count(*) FROM tab_search_diff_1 - 4 | SELECT count(*) FROM tab_search_diff_2 - 4 | SELECT count(*) FROM tab_search_same - 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(8 rows) + calls | query +-------+------- +(0 rows) DROP SCHEMA pgss_schema_1 CASCADE; NOTICE: drop cascades to 3 other objects diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/dml.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/dml.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/dml.out 2026-05-19 05:57:58.288765000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/dml.out 2026-05-19 06:02:45.119432000 +0000 @@ -73,19 +73,9 @@ (8 rows) SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+--------------------------------------------------------------------- - 1 | 1 | DELETE FROM pgss_dml_tab WHERE a > $1 - 1 | 3 | INSERT INTO pgss_dml_tab (a, b) VALUES ($1, $2), ($3, $4), ($5, $6) - 1 | 10 | INSERT INTO pgss_dml_tab VALUES(generate_series($1, $2), $3) - 1 | 12 | SELECT * FROM pgss_dml_tab ORDER BY a - 2 | 4 | SELECT * FROM pgss_dml_tab WHERE a > $1 ORDER BY a - 1 | 8 | SELECT * FROM pgss_dml_tab WHERE a IN ($1 /*, ... */) - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - 1 | 0 | SET pg_stat_statements.track_utility = $1 - 6 | 6 | UPDATE pgss_dml_tab SET b = $1 WHERE a = $2 - 1 | 3 | UPDATE pgss_dml_tab SET b = $1 WHERE a > $2 -(10 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -116,28 +106,9 @@ WHEN NOT MATCHED THEN DO NOTHING; DROP TABLE pgss_dml_tab; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+----------------------------------------------------------------------------------------- - 1 | 6 | MERGE INTO pgss_dml_tab USING pgss_dml_tab st ON (st.a = pgss_dml_tab.a AND st.a >= $1)+ - | | WHEN MATCHED AND length(st.b) > $2 THEN UPDATE SET b = pgss_dml_tab.b || st.a::text - 1 | 6 | MERGE INTO pgss_dml_tab USING pgss_dml_tab st ON (st.a = pgss_dml_tab.a AND st.a >= $1)+ - | | WHEN MATCHED THEN DELETE - 1 | 0 | MERGE INTO pgss_dml_tab USING pgss_dml_tab st ON (st.a = pgss_dml_tab.a AND st.a >= $1)+ - | | WHEN MATCHED THEN DO NOTHING - 1 | 6 | MERGE INTO pgss_dml_tab USING pgss_dml_tab st ON (st.a = pgss_dml_tab.a AND st.a >= $1)+ - | | WHEN MATCHED THEN UPDATE SET b = pgss_dml_tab.b || st.a::text - 1 | 6 | MERGE INTO pgss_dml_tab USING pgss_dml_tab st ON (st.a = pgss_dml_tab.a AND st.a >= $1)+ - | | WHEN MATCHED THEN UPDATE SET b = st.b || st.a::text - 1 | 0 | MERGE INTO pgss_dml_tab USING pgss_dml_tab st ON (st.a = pgss_dml_tab.a AND st.a >= $1)+ - | | WHEN NOT MATCHED THEN DO NOTHING - 1 | 0 | MERGE INTO pgss_dml_tab USING pgss_dml_tab st ON (st.a = pgss_dml_tab.a) + - | | WHEN NOT MATCHED THEN INSERT (a) VALUES ($1) - 2 | 0 | MERGE INTO pgss_dml_tab USING pgss_dml_tab st ON (st.a = pgss_dml_tab.a) + - | | WHEN NOT MATCHED THEN INSERT (a, b) VALUES ($1, $2) - 1 | 0 | MERGE INTO pgss_dml_tab USING pgss_dml_tab st ON (st.a = pgss_dml_tab.a) + - | | WHEN NOT MATCHED THEN INSERT (b, a) VALUES ($1, $2) - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(10 rows) + calls | rows | query +-------+------+------- +(0 rows) -- check that [temp] table relation extensions are tracked as writes CREATE TABLE pgss_extend_tab (a int, b text); diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/cursors.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/cursors.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/cursors.out 2026-05-19 05:57:58.288668000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/cursors.out 2026-05-19 06:02:45.209690000 +0000 @@ -16,12 +16,9 @@ DECLARE cursor_stats_1 CURSOR WITH HOLD FOR SELECT 2; CLOSE cursor_stats_1; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+------------------------------------------------------- - 2 | 0 | CLOSE cursor_stats_1 - 2 | 0 | DECLARE cursor_stats_1 CURSOR WITH HOLD FOR SELECT $1 - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(3 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -49,18 +46,9 @@ CLOSE cursor_stats_2; COMMIT; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+------------------------------------------------------- - 1 | 0 | BEGIN - 1 | 0 | CLOSE cursor_stats_1 - 1 | 0 | CLOSE cursor_stats_2 - 1 | 0 | COMMIT - 1 | 0 | DECLARE cursor_stats_1 CURSOR WITH HOLD FOR SELECT $1 - 1 | 0 | DECLARE cursor_stats_2 CURSOR WITH HOLD FOR SELECT $1 - 1 | 1 | FETCH $1 IN cursor_stats_1 - 1 | 1 | FETCH $1 IN cursor_stats_2 - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(9 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -185,23 +173,7 @@ COMMIT; SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | query --------+-------------------------------------------------------------------- - 1 | BEGIN - 1 | COMMIT - 1 | DECLARE pgss_cursor CURSOR FOR SELECT FROM generate_series($1, $2) - 3 | FETCH ABSOLUTE $1 pgss_cursor - 1 | FETCH ALL pgss_cursor - 1 | FETCH BACKWARD ALL pgss_cursor - 4 | FETCH BACKWARD pgss_cursor - 1 | FETCH FIRST pgss_cursor - 1 | FETCH FORWARD ALL pgss_cursor - 4 | FETCH FORWARD pgss_cursor - 1 | FETCH LAST pgss_cursor - 1 | FETCH NEXT pgss_cursor - 1 | FETCH PRIOR pgss_cursor - 3 | FETCH RELATIVE $1 pgss_cursor - 4 | FETCH pgss_cursor - 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(16 rows) + calls | query +-------+------- +(0 rows) diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/utility.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/utility.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/utility.out 2026-05-19 05:57:58.290669000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/utility.out 2026-05-19 06:02:45.974499000 +0000 @@ -24,17 +24,9 @@ NOTICE: table "tab_stats" does not exist, skipping NOTICE: table "tab_stats" does not exist, skipping NOTICE: table "tab_stats" does not exist, skipping - calls | rows | query --------+------+-------------------------------------------------------------------------------------- - 1 | 0 | ALTER TABLE tab_stats ADD CONSTRAINT a_nonzero CHECK (a <> 0) - 1 | 0 | ALTER TABLE tab_stats ALTER COLUMN b TYPE text USING 'data' || b - 1 | 0 | ALTER TABLE tab_stats ALTER COLUMN b set default 'a' - 1 | 0 | CREATE INDEX index_stats ON tab_stats(b, (b || 'data1'), (b || 'data2')) WHERE a > 0 - 1 | 0 | CREATE TEMP TABLE tab_stats (a int, b char(20)) - 3 | 0 | DROP TABLE IF EXISTS tab_stats - 1 | 0 | DROP TABLE tab_stats - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(8 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -97,55 +89,9 @@ CREATE STATISTICS tab_expr_stats_1 (mcv) ON a, (2*a), (3*b) FROM tab_expr_stats; DROP TABLE tab_expr_stats; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+------------------------------------------------------------------------------------- - 1 | 0 | ALTER FOREIGN TABLE foreign_stats ADD COLUMN b integer DEFAULT 1 - 1 | 0 | ALTER FOREIGN TABLE foreign_stats ADD CONSTRAINT b_nonzero CHECK (b <> 0) - 1 | 0 | ALTER INDEX pt_stats_index ATTACH PARTITION pt_stats2_index - 1 | 0 | ALTER TABLE pt_stats ATTACH PARTITION pt_stats1 FOR VALUES FROM (0) TO (100) - 1 | 0 | ALTER VIEW view_stats ALTER COLUMN a SET DEFAULT 2 - 1 | 0 | CREATE FOREIGN DATA WRAPPER wrapper_stats - 1 | 0 | CREATE FOREIGN TABLE foreign_stats (a int) SERVER server_stats - 1 | 0 | CREATE FUNCTION func_stats(a text DEFAULT 'a_data', b text DEFAULT lower('b_data'))+ - | | RETURNS text AS $$ SELECT $1::text || '_' || $2::text; $$ LANGUAGE SQL + - | | SET work_mem = $1 - 1 | 0 | CREATE FUNCTION trigger_func_stats () RETURNS trigger LANGUAGE plpgsql + - | | AS $$ BEGIN return OLD; end; $$ - 1 | 0 | CREATE INDEX pt_stats2_index ON ONLY pt_stats2 (a) - 1 | 0 | CREATE INDEX pt_stats_index ON ONLY pt_stats (a) - 1 | 0 | CREATE POLICY policy_stats ON tab_policy_stats USING (a = 5) WITH CHECK (b < 5) - 1 | 0 | CREATE RULE rules_stats AS ON INSERT TO tab_rule_stats DO INSTEAD + - | | INSERT INTO tab_rule_stats_2 VALUES(new.*, 1, 2) - 1 | 0 | CREATE SERVER server_stats FOREIGN DATA WRAPPER wrapper_stats - 1 | 0 | CREATE STATISTICS tab_expr_stats_1 (mcv) ON a, (2*a), (3*b) FROM tab_expr_stats - 1 | 0 | CREATE TABLE pt_stats (a int, b int) PARTITION BY range (a) - 1 | 0 | CREATE TABLE pt_stats1 (a int, b int) - 1 | 0 | CREATE TABLE pt_stats2 PARTITION OF pt_stats FOR VALUES FROM (100) TO (200) - 1 | 0 | CREATE TABLE tab_expr_stats (a int, b int) - 1 | 0 | CREATE TABLE tab_policy_stats (a int, b int) - 1 | 0 | CREATE TABLE tab_rule_stats (a int, b int) - 1 | 0 | CREATE TABLE tab_rule_stats_2 (a int, b int, c int, d int) - 1 | 0 | CREATE TABLE trigger_tab_stats (a int, b int) - 1 | 0 | CREATE TRIGGER trigger_tab_stats + - | | AFTER UPDATE ON trigger_tab_stats + - | | FOR EACH ROW WHEN (OLD.a < 0 AND OLD.b < 1 AND true) + - | | EXECUTE FUNCTION trigger_func_stats() - 1 | 0 | CREATE TYPE stats_type as (f1 numeric(35, 6), f2 numeric(35, 2)) - 1 | 0 | CREATE VIEW view_stats AS SELECT 1::int AS a, 2::int AS b - 1 | 0 | DROP FOREIGN DATA WRAPPER wrapper_stats - 1 | 0 | DROP FOREIGN TABLE foreign_stats - 1 | 0 | DROP FUNCTION func_stats - 1 | 0 | DROP RULE rules_stats ON tab_rule_stats - 1 | 0 | DROP SERVER server_stats - 1 | 0 | DROP TABLE pt_stats - 1 | 0 | DROP TABLE tab_expr_stats - 1 | 0 | DROP TABLE tab_policy_stats - 1 | 0 | DROP TABLE tab_rule_stats, tab_rule_stats_2 - 1 | 0 | DROP TABLE trigger_tab_stats - 1 | 0 | DROP TYPE stats_type - 1 | 0 | DROP VIEW view_stats - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(39 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -181,17 +127,9 @@ BEGIN TRANSACTION NOT DEFERRABLE, READ ONLY, READ WRITE, DEFERRABLE; COMMIT; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+--------------------------------------------------------------------- - 4 | 0 | ABORT - 6 | 0 | BEGIN - 2 | 0 | BEGIN ISOLATION LEVEL SERIALIZABLE - 1 | 0 | BEGIN TRANSACTION DEFERRABLE - 1 | 0 | BEGIN TRANSACTION NOT DEFERRABLE, READ ONLY, READ WRITE, DEFERRABLE - 1 | 0 | BEGIN TRANSACTION READ ONLY, READ WRITE, DEFERRABLE, NOT DEFERRABLE - 7 | 0 | COMMIT WORK - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(8 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -207,14 +145,9 @@ PREPARE TRANSACTION 'stat_trans2'; ROLLBACK PREPARED 'stat_trans2'; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+---------------------------------------------------- - 2 | 0 | BEGIN - 1 | 0 | COMMIT PREPARED $1 - 2 | 0 | PREPARE TRANSACTION $1 - 1 | 0 | ROLLBACK PREPARED $1 - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(5 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -237,15 +170,9 @@ RELEASE SAVEPOINT sp1; COMMIT; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+---------------------------------------------------- - 1 | 0 | BEGIN - 1 | 0 | COMMIT - 3 | 0 | RELEASE $1 - 4 | 0 | ROLLBACK TO $1 - 4 | 0 | SAVEPOINT $1 - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(6 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -282,12 +209,9 @@ (2 rows) SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+--------------------------------------------------------------------------------- - 2 | 0 | EXPLAIN (costs off) SELECT $1 - 2 | 0 | EXPLAIN (costs off) SELECT a FROM generate_series($1,$2) AS tab(a) WHERE a = $3 - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(3 rows) + calls | rows | query +-------+------+------- +(0 rows) -- CALL CREATE OR REPLACE PROCEDURE sum_one(i int) AS $$ @@ -348,15 +272,9 @@ (1 row) SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+---------------------------------------------------- - 2 | 0 | CALL in_out($1, $2, $3) - 1 | 0 | CALL overload($1) - 1 | 0 | CALL overload($1) - 2 | 0 | CALL sum_one($1) - 2 | 0 | CALL sum_two($1,$2) - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(6 rows) + calls | rows | query +-------+------+------- +(0 rows) -- COPY CREATE TABLE copy_stats (a int, b int); @@ -384,17 +302,9 @@ COPY (DELETE FROM copy_stats WHERE a = 1 RETURNING *) TO STDOUT; 1 4 SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+------------------------------------------------------------------- - 1 | 1 | COPY (DELETE FROM copy_stats WHERE a = 1 RETURNING *) TO STDOUT - 1 | 1 | COPY (INSERT INTO copy_stats VALUES (1, 1) RETURNING *) TO STDOUT - 1 | 1 | COPY (INSERT INTO copy_stats VALUES (2, 2) RETURNING *) TO STDOUT - 1 | 1 | COPY (SELECT 1) TO STDOUT - 1 | 1 | COPY (SELECT 2) TO STDOUT - 1 | 2 | COPY (UPDATE copy_stats SET b = b + 1 RETURNING *) TO STDOUT - 1 | 2 | COPY (UPDATE copy_stats SET b = b + 2 RETURNING *) TO STDOUT - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(8 rows) + calls | rows | query +-------+------+------- +(0 rows) DROP TABLE copy_stats; SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -418,16 +328,9 @@ FROM generate_series(1, 5) AS tab(a) WHERE a < 4 AND a > 1; DROP TABLE ctas_stats_2; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+-------------------------------------------------------------------- - 2 | 2 | CREATE TABLE ctas_stats_1 AS SELECT $1 AS a - 2 | 4 | CREATE TABLE ctas_stats_2 AS + - | | SELECT a AS col1, $1::int AS col2 + - | | FROM generate_series($2, $3) AS tab(a) WHERE a < $4 AND a > $5 - 2 | 0 | DROP TABLE ctas_stats_1 - 2 | 0 | DROP TABLE ctas_stats_2 - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(5 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -446,14 +349,9 @@ FROM generate_series(1, 5) AS tab(a) WHERE a < 4 AND a > 3; DROP MATERIALIZED VIEW matview_stats_1; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+-------------------------------------------------------------------- - 2 | 2 | CREATE MATERIALIZED VIEW matview_stats_1 AS + - | | SELECT a AS col1, $1::int AS col2 + - | | FROM generate_series($2, $3) AS tab(a) WHERE a < $4 AND a > $5 - 2 | 0 | DROP MATERIALIZED VIEW matview_stats_1 - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(3 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -471,17 +369,9 @@ FROM generate_series(1, 5) AS tab(a) WHERE a < 4 AND a > 3; DROP VIEW view_stats_1; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+----------------------------------------------------------------- - 1 | 0 | CREATE VIEW view_stats_1 AS + - | | SELECT a AS col1, 2::int AS col2 + - | | FROM generate_series(1, 10) AS tab(a) WHERE a < 5 AND a > 2 - 1 | 0 | CREATE VIEW view_stats_1 AS + - | | SELECT a AS col1, 4::int AS col2 + - | | FROM generate_series(1, 5) AS tab(a) WHERE a < 4 AND a > 3 - 2 | 0 | DROP VIEW view_stats_1 - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(4 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -495,14 +385,9 @@ ALTER DOMAIN domain_stats ADD CONSTRAINT higher_than_one CHECK (VALUE > 1); DROP DOMAIN domain_stats; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+---------------------------------------------------------------------------- - 1 | 0 | ALTER DOMAIN domain_stats ADD CONSTRAINT higher_than_one CHECK (VALUE > 1) - 1 | 0 | ALTER DOMAIN domain_stats SET DEFAULT '3' - 1 | 0 | CREATE DOMAIN domain_stats AS int CHECK (VALUE > 0) - 1 | 0 | DROP DOMAIN domain_stats - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(5 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -536,14 +421,9 @@ DEALLOCATE ALL; DEALLOCATE PREPARE ALL; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+---------------------------------------------------- - 2 | 0 | DEALLOCATE $1 - 2 | 0 | DEALLOCATE ALL - 2 | 2 | PREPARE stat_select AS SELECT $1 AS a - 1 | 1 | SELECT $1 as a - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(5 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -606,43 +486,9 @@ SET TIME ZONE 'CST7CDT,M4.1.0,M10.5.0'; RESET TIME ZONE; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+------------------------------------------------------------------ - 3 | 0 | BEGIN - 3 | 0 | COMMIT - 1 | 0 | CREATE ROLE regress_stat_set_1 - 1 | 0 | CREATE ROLE regress_stat_set_2 - 2 | 0 | RESET SESSION AUTHORIZATION - 1 | 0 | RESET TIME ZONE - 1 | 0 | RESET enable_seqscan - 1 | 0 | RESET work_mem - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - 1 | 0 | SET LOCAL SESSION AUTHORIZATION 'regress_stat_set_1' - 1 | 0 | SET LOCAL SESSION AUTHORIZATION 'regress_stat_set_2' - 1 | 0 | SET LOCAL SESSION AUTHORIZATION DEFAULT - 2 | 0 | SET LOCAL work_mem = $1 - 2 | 0 | SET LOCAL work_mem = DEFAULT - 1 | 0 | SET LOCAL work_mem FROM CURRENT - 1 | 0 | SET SESSION AUTHORIZATION 'regress_stat_set_1' - 1 | 0 | SET SESSION AUTHORIZATION 'regress_stat_set_2' - 1 | 0 | SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY - 1 | 0 | SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY, READ ONLY - 1 | 0 | SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY, READ WRITE - 1 | 0 | SET SESSION SESSION AUTHORIZATION DEFAULT - 1 | 0 | SET TIME ZONE 'America/New_York' - 1 | 0 | SET TIME ZONE 'Asia/Tokyo' - 1 | 0 | SET TIME ZONE 'CST7CDT,M4.1.0,M10.5.0' - 2 | 0 | SET TIME ZONE DEFAULT - 1 | 0 | SET TRANSACTION ISOLATION LEVEL READ COMMITTED - 1 | 0 | SET TRANSACTION ISOLATION LEVEL REPEATABLE READ - 1 | 0 | SET TRANSACTION ISOLATION LEVEL SERIALIZABLE - 1 | 0 | SET XML OPTION CONTENT - 1 | 0 | SET XML OPTION DOCUMENT - 2 | 0 | SET enable_seqscan = $1 - 5 | 0 | SET work_mem = $1 - 2 | 0 | SET work_mem = DEFAULT - 1 | 0 | SET work_mem FROM CURRENT -(34 rows) + calls | rows | query +-------+------+------- +(0 rows) DROP ROLE regress_stat_set_1; DROP ROLE regress_stat_set_2; @@ -694,21 +540,9 @@ COMMIT; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+------------------------------------------------------------------------- - 1 | 0 | BEGIN - 1 | 0 | COMMIT - 1 | 3 | COPY pgss_ctas (a, b) FROM STDIN - 1 | 13 | CREATE MATERIALIZED VIEW pgss_matv AS SELECT * FROM pgss_ctas - 1 | 10 | CREATE TABLE pgss_ctas AS SELECT a, $1 b FROM generate_series($2, $3) a - 1 | 0 | DECLARE pgss_cursor CURSOR FOR SELECT * FROM pgss_matv - 1 | 5 | FETCH FORWARD $1 pgss_cursor - 1 | 7 | FETCH FORWARD ALL pgss_cursor - 1 | 1 | FETCH NEXT pgss_cursor - 1 | 13 | REFRESH MATERIALIZED VIEW pgss_matv - 1 | 10 | SELECT generate_series($1, $2) c INTO pgss_select_into - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(12 rows) + calls | rows | query +-------+------+------- +(0 rows) DROP MATERIALIZED VIEW pgss_matv; DROP TABLE pgss_ctas; @@ -724,12 +558,9 @@ SET SCHEMA 'public'; RESET ALL; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+---------------------------------------------------- - 1 | 0 | RESET ALL - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - 2 | 0 | SET SCHEMA $1 -(3 rows) + calls | rows | query +-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/level_tracking.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/level_tracking.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/level_tracking.out 2026-05-19 05:57:58.289339000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/level_tracking.out 2026-05-19 06:02:47.394731000 +0000 @@ -19,15 +19,9 @@ $$ LANGUAGE plpgsql; SELECT toplevel, calls, query FROM pg_stat_statements WHERE query LIKE '%DELETE%' ORDER BY query COLLATE "C", toplevel; - toplevel | calls | query -----------+-------+-------------------------------- - t | 1 | DELETE FROM stats_track_tab - t | 1 | DO $$ + - | | BEGIN + - | | DELETE FROM stats_track_tab;+ - | | END; + - | | $$ LANGUAGE plpgsql -(2 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -49,23 +43,9 @@ END; $$; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C", toplevel; - toplevel | calls | query -----------+-------+---------------------------------------------------- - f | 1 | DELETE FROM stats_track_tab - t | 1 | DELETE FROM stats_track_tab - t | 1 | DO $$ + - | | BEGIN + - | | DELETE FROM stats_track_tab; + - | | END; $$ - t | 1 | DO LANGUAGE plpgsql $$ + - | | BEGIN + - | | -- this is a SELECT + - | | PERFORM 'hello world'::TEXT; + - | | END; $$ - f | 1 | SELECT $1::TEXT - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - t | 1 | SET pg_stat_statements.track = $1 -(7 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- Procedure with multiple utility statements. CREATE OR REPLACE PROCEDURE proc_with_utility_stmt() @@ -87,13 +67,9 @@ CALL proc_with_utility_stmt(); SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C", toplevel; - toplevel | calls | query -----------+-------+---------------------------------------------------- - t | 1 | CALL proc_with_utility_stmt() - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - f | 2 | SHOW pg_stat_statements.track - f | 1 | SHOW pg_stat_statements.track_utility -(4 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- top-level tracking. SET pg_stat_statements.track = 'top'; @@ -106,11 +82,9 @@ CALL proc_with_utility_stmt(); SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C", toplevel; - toplevel | calls | query -----------+-------+---------------------------------------------------- - t | 1 | CALL proc_with_utility_stmt() - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(2 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- EXPLAIN - all-level tracking. CREATE TABLE test_table (x int); @@ -206,38 +180,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+--------------------------------------------------------------------- - t | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2) - f | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2); - t | 1 | EXPLAIN (COSTS OFF) (TABLE test_table) - f | 1 | EXPLAIN (COSTS OFF) (TABLE test_table); - t | 1 | EXPLAIN (COSTS OFF) (VALUES ($1, $2)) - f | 1 | EXPLAIN (COSTS OFF) (VALUES ($1, $2)); - t | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab - f | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab; - t | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES (($1)) - f | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES (($1)); - t | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($1, $2) id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) - f | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($1, $2) id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id); - t | 1 | EXPLAIN (COSTS OFF) SELECT $1 - t | 1 | EXPLAIN (COSTS OFF) SELECT $1 UNION SELECT $2 - f | 1 | EXPLAIN (COSTS OFF) SELECT $1 UNION SELECT $2; - f | 1 | EXPLAIN (COSTS OFF) SELECT $1; - t | 1 | EXPLAIN (COSTS OFF) TABLE stats_track_tab - f | 1 | EXPLAIN (COSTS OFF) TABLE stats_track_tab; - t | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1 WHERE x = $2 - f | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1 WHERE x = $2; - t | 1 | EXPLAIN (COSTS OFF) VALUES ($1) - f | 1 | EXPLAIN (COSTS OFF) VALUES ($1); - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(23 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- EXPLAIN - top-level tracking. SET pg_stat_statements.track = 'top'; @@ -332,24 +277,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+-------------------------------------------------------------------- - t | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2) - t | 1 | EXPLAIN (COSTS OFF) (TABLE test_table) - t | 1 | EXPLAIN (COSTS OFF) (VALUES ($1, $2)) - t | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab - t | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES (($1)) - t | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($1, $2) id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) - t | 1 | EXPLAIN (COSTS OFF) SELECT $1 - t | 1 | EXPLAIN (COSTS OFF) SELECT $1 UNION SELECT $2 - t | 1 | EXPLAIN (COSTS OFF) TABLE stats_track_tab - t | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1 WHERE x = $2 - t | 1 | EXPLAIN (COSTS OFF) VALUES ($1) - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(12 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- EXPLAIN - all-level tracking with multi-statement strings. SET pg_stat_statements.track = 'all'; @@ -405,22 +335,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+--------------------------------------------------------------------------------------------------------------------- - t | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2, $3) - t | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2, $3) UNION SELECT $4, $5, $6 - f | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2, $3); EXPLAIN (COSTS OFF) (SELECT 1, 2, 3, 4); - t | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2, $3, $4) - f | 1 | EXPLAIN (COSTS OFF) (SELECT 1, 2, 3); EXPLAIN (COSTS OFF) (SELECT $1, $2, $3, $4); - t | 1 | EXPLAIN (COSTS OFF) SELECT $1 - t | 1 | EXPLAIN (COSTS OFF) SELECT $1, $2 - t | 1 | EXPLAIN (COSTS OFF) SELECT $1, $2 UNION SELECT $3, $4 - f | 1 | EXPLAIN (COSTS OFF) SELECT $1, $2 UNION SELECT $3, $4; EXPLAIN (COSTS OFF) (SELECT 1, 2, 3) UNION SELECT 3, 4, 5; - f | 1 | EXPLAIN (COSTS OFF) SELECT $1; EXPLAIN (COSTS OFF) SELECT 1, 2; - f | 1 | EXPLAIN (COSTS OFF) SELECT 1, 2 UNION SELECT 3, 4; EXPLAIN (COSTS OFF) (SELECT $1, $2, $3) UNION SELECT $4, $5, $6; - f | 1 | EXPLAIN (COSTS OFF) SELECT 1; EXPLAIN (COSTS OFF) SELECT $1, $2; - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(13 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -494,30 +411,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+---------------------------------------------------------------------------------------------------------------------------------- - t | 1 | EXPLAIN (COSTS OFF) (TABLE test_table) - t | 1 | EXPLAIN (COSTS OFF) (VALUES ($1, $2)) - t | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab - t | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab WHERE x = $1 - f | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab; EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab WHERE x = $1; - f | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab; EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab WHERE x = 1; - t | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES ($1), ($2) - t | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES (($1)) - f | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES (($1)); EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES (1), (2); - f | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES ((1)); EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES ($1), ($2); - t | 1 | EXPLAIN (COSTS OFF) TABLE stats_track_tab - f | 1 | EXPLAIN (COSTS OFF) TABLE stats_track_tab; EXPLAIN (COSTS OFF) (TABLE test_table); - f | 1 | EXPLAIN (COSTS OFF) TABLE stats_track_tab; EXPLAIN (COSTS OFF) (TABLE test_table); - t | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1 - t | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1 WHERE x = $2 - f | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1 WHERE x = $2; EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = 1; - f | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = 1 WHERE x = 1; EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1; - t | 1 | EXPLAIN (COSTS OFF) VALUES ($1) - f | 1 | EXPLAIN (COSTS OFF) VALUES ($1); EXPLAIN (COSTS OFF) (VALUES (1, 2)); - f | 1 | EXPLAIN (COSTS OFF) VALUES (1); EXPLAIN (COSTS OFF) (VALUES ($1, $2)); - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(21 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -547,23 +443,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+------------------------------------------------------------------------------------------------ - t | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($1, $2) id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) - f | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($1, $2) id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id); EXPLAIN (COSTS OFF) SELECT 1, 2, 3, 4, 5; - f | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series(1, 10) id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id); EXPLAIN (COSTS OFF) SELECT $1, $2, $3, $4, $5; - t | 1 | EXPLAIN (COSTS OFF) SELECT $1, $2, $3, $4, $5 - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(5 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- EXPLAIN - top-level tracking with multi-statement strings. SET pg_stat_statements.track = 'top'; @@ -696,29 +578,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+------------------------------------------------------------------------------------------------------------ - t | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2, $3) - t | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2, $3) UNION SELECT $4, $5, $6 - t | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2, $3, $4) - t | 1 | EXPLAIN (COSTS OFF) (TABLE test_table) - t | 1 | EXPLAIN (COSTS OFF) (VALUES ($1, $2)) - t | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab - t | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab WHERE x = $1 - t | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES (($1)) - t | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab USING (SELECT id FROM generate_series($1, $2) id) ON x = id+ - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) - t | 1 | EXPLAIN (COSTS OFF) SELECT $1 - t | 1 | EXPLAIN (COSTS OFF) SELECT $1, $2 - t | 1 | EXPLAIN (COSTS OFF) SELECT $1, $2 UNION SELECT $3, $4 - t | 1 | EXPLAIN (COSTS OFF) SELECT $1, $2, $3, $4, $5 - t | 1 | EXPLAIN (COSTS OFF) TABLE stats_track_tab - t | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1 - t | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1 WHERE x = $2 - t | 1 | EXPLAIN (COSTS OFF) VALUES ($1) - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(18 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- EXPLAIN with CTEs - all-level tracking SET pg_stat_statements.track = 'all'; @@ -789,30 +651,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+------------------------------------------------------------------------------------------- - t | 1 | EXPLAIN (COSTS OFF) (WITH a AS (SELECT $1) (SELECT $2, $3)) - f | 1 | EXPLAIN (COSTS OFF) (WITH a AS (SELECT $1) (SELECT $2, $3)); - t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) DELETE FROM stats_track_tab - f | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) DELETE FROM stats_track_tab; - t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) INSERT INTO stats_track_tab VALUES (($2)) - f | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) INSERT INTO stats_track_tab VALUES (($2)); - t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($2, $3) id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) - f | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($2, $3) id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id); - t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) SELECT $2 - f | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) SELECT $2; - t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) UPDATE stats_track_tab SET x = $2 WHERE x = $3 - f | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) UPDATE stats_track_tab SET x = $2 WHERE x = $3; - t | 1 | EXPLAIN (COSTS OFF) WITH a AS (select $1) SELECT $2 UNION SELECT $3 - f | 1 | EXPLAIN (COSTS OFF) WITH a AS (select $1) SELECT $2 UNION SELECT $3; - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(15 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- EXPLAIN with CTEs - top-level tracking SET pg_stat_statements.track = 'top'; @@ -883,20 +724,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+------------------------------------------------------------------------------------------ - t | 1 | EXPLAIN (COSTS OFF) (WITH a AS (SELECT $1) (SELECT $2, $3)) - t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) DELETE FROM stats_track_tab - t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) INSERT INTO stats_track_tab VALUES (($2)) - t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($2, $3) id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) - t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) SELECT $2 - t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) UPDATE stats_track_tab SET x = $2 WHERE x = $3 - t | 1 | EXPLAIN (COSTS OFF) WITH a AS (select $1) SELECT $2 UNION SELECT $3 - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(8 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- Explain analyze, all-level tracking. SET pg_stat_statements.track = 'all'; @@ -921,16 +751,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+------------------------------------------------------------------------------- - t | 1 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) + - | | DECLARE foocur CURSOR FOR SELECT * FROM stats_track_tab - f | 1 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) + - | | DECLARE foocur CURSOR FOR SELECT * FROM stats_track_tab; - t | 1 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT $1 - f | 1 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT $1; - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(5 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- Explain analyze, top tracking. SET pg_stat_statements.track = 'top'; @@ -955,13 +778,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+------------------------------------------------------------------------------ - t | 1 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) + - | | DECLARE foocur CURSOR FOR SELECT * FROM stats_track_tab - t | 1 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT $1 - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(3 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- Create Materialized View, all-level tracking. SET pg_stat_statements.track = 'all'; @@ -975,12 +794,9 @@ SELECT * FROM generate_series(1, 5) as id; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+---------------------------------------------------- - t | 1 | CREATE MATERIALIZED VIEW pgss_materialized_view AS+ - | | SELECT * FROM generate_series($1, $2) as id - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(2 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- CREATE MATERIALIZED VIEW, top-level tracking. SET pg_stat_statements.track = 'top'; @@ -994,12 +810,9 @@ SELECT * FROM generate_series(1, 5) as id; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+------------------------------------------------------ - t | 1 | CREATE MATERIALIZED VIEW pgss_materialized_view_2 AS+ - | | SELECT * FROM generate_series($1, $2) as id - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(2 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- REFRESH MATERIALIZED VIEW, all-level tracking. SET pg_stat_statements.track = 'all'; @@ -1012,11 +825,9 @@ REFRESH MATERIALIZED VIEW pgss_materialized_view; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+---------------------------------------------------- - t | 1 | REFRESH MATERIALIZED VIEW pgss_materialized_view - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(2 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- REFRESH MATERIALIZED VIEW, top-level tracking. SET pg_stat_statements.track = 'top'; @@ -1029,11 +840,9 @@ REFRESH MATERIALIZED VIEW pgss_materialized_view; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+---------------------------------------------------- - t | 1 | REFRESH MATERIALIZED VIEW pgss_materialized_view - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(2 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- CREATE TABLE AS, all-level tracking. SET pg_stat_statements.track = 'all'; @@ -1048,14 +857,9 @@ CREATE TEMPORARY TABLE pgss_ctas_2 AS EXECUTE test_prepare_pgss; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+----------------------------------------------------------------- - t | 1 | CREATE TEMPORARY TABLE pgss_ctas_1 AS SELECT $1 - f | 1 | CREATE TEMPORARY TABLE pgss_ctas_1 AS SELECT $1; - t | 1 | CREATE TEMPORARY TABLE pgss_ctas_2 AS EXECUTE test_prepare_pgss - f | 1 | PREPARE test_prepare_pgss AS select generate_series($1, $2) - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(5 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- CREATE TABLE AS, top-level tracking. SET pg_stat_statements.track = 'top'; @@ -1069,12 +873,9 @@ CREATE TEMPORARY TABLE pgss_ctas_4 AS EXECUTE test_prepare_pgss; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+----------------------------------------------------------------- - t | 1 | CREATE TEMPORARY TABLE pgss_ctas_3 AS SELECT $1 - t | 1 | CREATE TEMPORARY TABLE pgss_ctas_4 AS EXECUTE test_prepare_pgss - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(3 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- EXPLAIN with CREATE TABLE AS - all-level tracking. SET pg_stat_statements.track = 'all'; @@ -1092,12 +893,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+---------------------------------------------------------------------------- - t | 1 | EXPLAIN (COSTS OFF) CREATE TEMPORARY TABLE pgss_explain_ctas AS SELECT $1 - f | 1 | EXPLAIN (COSTS OFF) CREATE TEMPORARY TABLE pgss_explain_ctas AS SELECT $1; - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(3 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- EXPLAIN with CREATE TABLE AS - top-level tracking. SET pg_stat_statements.track = 'top'; @@ -1115,11 +913,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+--------------------------------------------------------------------------- - t | 1 | EXPLAIN (COSTS OFF) CREATE TEMPORARY TABLE pgss_explain_ctas AS SELECT $1 - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(2 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- DECLARE CURSOR, all-level tracking. SET pg_stat_statements.track = 'all'; @@ -1140,16 +936,9 @@ COMMIT; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+---------------------------------------------------------- - t | 1 | BEGIN - t | 1 | CLOSE foocur - t | 1 | COMMIT - t | 1 | DECLARE FOOCUR CURSOR FOR SELECT * from stats_track_tab - f | 1 | DECLARE FOOCUR CURSOR FOR SELECT * from stats_track_tab; - t | 1 | FETCH FORWARD $1 FROM foocur - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(7 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- DECLARE CURSOR, top-level tracking. SET pg_stat_statements.track = 'top'; @@ -1170,15 +959,9 @@ COMMIT; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+--------------------------------------------------------- - t | 1 | BEGIN - t | 1 | CLOSE foocur - t | 1 | COMMIT - t | 1 | DECLARE FOOCUR CURSOR FOR SELECT * FROM stats_track_tab - t | 1 | FETCH FORWARD $1 FROM foocur - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(6 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- COPY - all-level tracking. SET pg_stat_statements.track = 'all'; @@ -1207,26 +990,9 @@ 2 SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+----------------------------------------------------------------------------- - f | 1 | COPY (DELETE FROM stats_track_tab WHERE x = $1 RETURNING x) TO stdout - t | 1 | COPY (DELETE FROM stats_track_tab WHERE x = 2 RETURNING x) TO stdout - f | 1 | COPY (INSERT INTO stats_track_tab (x) VALUES ($1) RETURNING x) TO stdout - t | 1 | COPY (INSERT INTO stats_track_tab (x) VALUES (1) RETURNING x) TO stdout - f | 1 | COPY (MERGE INTO stats_track_tab USING (SELECT $1 id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) RETURNING x) TO stdout - t | 1 | COPY (MERGE INTO stats_track_tab USING (SELECT 1 id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) RETURNING x) TO stdout - f | 1 | COPY (SELECT $1 UNION SELECT $2) TO stdout - f | 1 | COPY (SELECT $1) TO stdout - t | 1 | COPY (SELECT 1 UNION SELECT 2) TO stdout - t | 1 | COPY (SELECT 1) TO stdout - f | 1 | COPY (UPDATE stats_track_tab SET x = $1 WHERE x = $2 RETURNING x) TO stdout - t | 1 | COPY (UPDATE stats_track_tab SET x = 2 WHERE x = 1 RETURNING x) TO stdout - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(13 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- COPY - top-level tracking. SET pg_stat_statements.track = 'top'; @@ -1255,18 +1021,9 @@ 2 SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+--------------------------------------------------------------------------- - t | 1 | COPY (DELETE FROM stats_track_tab WHERE x = 2 RETURNING x) TO stdout - t | 1 | COPY (INSERT INTO stats_track_tab (x) VALUES (1) RETURNING x) TO stdout - t | 1 | COPY (MERGE INTO stats_track_tab USING (SELECT 1 id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) RETURNING x) TO stdout - t | 1 | COPY (SELECT 1 UNION SELECT 2) TO stdout - t | 1 | COPY (SELECT 1) TO stdout - t | 1 | COPY (UPDATE stats_track_tab SET x = 2 WHERE x = 1 RETURNING x) TO stdout - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(7 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- DO block - top-level tracking without utility. SET pg_stat_statements.track = 'top'; @@ -1289,11 +1046,9 @@ END; $$; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C", toplevel; - toplevel | calls | query -----------+-------+---------------------------------------------------- - t | 1 | DELETE FROM stats_track_tab - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(2 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- DO block - all-level tracking without utility. SET pg_stat_statements.track = 'all'; @@ -1315,13 +1070,9 @@ END; $$; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C", toplevel; - toplevel | calls | query -----------+-------+---------------------------------------------------- - f | 1 | DELETE FROM stats_track_tab - t | 1 | DELETE FROM stats_track_tab - f | 1 | SELECT $1::TEXT - t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(4 rows) + toplevel | calls | query +----------+-------+------- +(0 rows) -- DO block --- multiple inner queries with separators SET pg_stat_statements.track = 'all'; @@ -1342,13 +1093,9 @@ SELECT toplevel, calls, rows, query FROM pg_stat_statements WHERE toplevel IS FALSE ORDER BY query COLLATE "C"; - toplevel | calls | rows | query -----------+-------+------+------------------------------------- - f | 1 | 0 | CREATE TABLE pgss_do_table (id INT) - f | 1 | 0 | DROP TABLE pgss_do_table - f | 1 | 0 | SELECT a FROM pgss_do_util_tab_1 - f | 1 | 0 | SELECT a FROM pgss_do_util_tab_2 -(4 rows) + toplevel | calls | rows | query +----------+-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -1365,13 +1112,9 @@ SELECT toplevel, calls, rows, query FROM pg_stat_statements WHERE toplevel IS FALSE ORDER BY query COLLATE "C"; - toplevel | calls | rows | query -----------+-------+------+------------------------------------- - f | 1 | 0 | CREATE TABLE pgss_do_table (id INT) - f | 1 | 0 | DROP TABLE pgss_do_table - f | 1 | 0 | SELECT a FROM pgss_do_util_tab_1 - f | 1 | 0 | SELECT a FROM pgss_do_util_tab_2 -(4 rows) + toplevel | calls | rows | query +----------+-------+------+------- +(0 rows) DROP TABLE pgss_do_util_tab_1, pgss_do_util_tab_2; -- PL/pgSQL function - top-level tracking. @@ -1418,12 +1161,9 @@ (1 row) SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+---------------------------------------------------- - 2 | 2 | SELECT PLUS_ONE($1) - 2 | 2 | SELECT PLUS_TWO($1) - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(3 rows) + calls | rows | query +-------+------+------- +(0 rows) -- immutable SQL function --- can be executed at plan time CREATE FUNCTION PLUS_THREE(i INTEGER) RETURNS INTEGER AS @@ -1441,14 +1181,9 @@ (1 row) SELECT toplevel, calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | rows | query -----------+-------+------+------------------------------------------------------------------------------ - t | 2 | 2 | SELECT PLUS_ONE($1) - t | 2 | 2 | SELECT PLUS_THREE($1) - t | 2 | 2 | SELECT PLUS_TWO($1) - t | 1 | 3 | SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C" - t | 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(5 rows) + toplevel | calls | rows | query +----------+-------+------+------- +(0 rows) -- PL/pgSQL function - all-level tracking. SET pg_stat_statements.track = 'all'; @@ -1498,13 +1233,9 @@ (1 row) SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+---------------------------------------------------- - 2 | 2 | SELECT (i + $2)::INTEGER LIMIT $3 - 2 | 2 | SELECT PLUS_ONE($1) - 2 | 2 | SELECT PLUS_TWO($1) - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(4 rows) + calls | rows | query +-------+------+------- +(0 rows) -- immutable SQL function --- can be executed at plan time CREATE FUNCTION PLUS_THREE(i INTEGER) RETURNS INTEGER AS @@ -1522,16 +1253,9 @@ (1 row) SELECT toplevel, calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | rows | query -----------+-------+------+------------------------------------------------------------------------------ - f | 2 | 2 | SELECT (i + $2)::INTEGER LIMIT $3 - t | 2 | 2 | SELECT PLUS_ONE($1) - t | 2 | 2 | SELECT PLUS_THREE($1) - t | 2 | 2 | SELECT PLUS_TWO($1) - t | 1 | 4 | SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C" - f | 2 | 2 | SELECT i + $2 LIMIT $3 - t | 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(7 rows) + toplevel | calls | rows | query +----------+-------+------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -1562,14 +1286,9 @@ SELECT toplevel, calls, rows, plans, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | rows | plans | query -----------+-------+------+-------+-------------------------------------------------------------------- - t | 2 | 2 | 2 | SELECT PLUS_THREE($1) - f | 2 | 2 | 2 | SELECT i + $2 LIMIT $3 - t | 1 | 1 | 0 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - t | 0 | 0 | 1 | SELECT toplevel, calls, rows, plans, query FROM pg_stat_statements+ - | | | | ORDER BY query COLLATE "C" -(4 rows) + toplevel | calls | rows | plans | query +----------+-------+------+-------+------- +(0 rows) RESET pg_stat_statements.track_planning; -- AFTER trigger SQL (ExecutorFinish) - all-level tracking. @@ -1596,12 +1315,9 @@ INSERT INTO test_trigger VALUES (2, 'test2'); SELECT toplevel, calls, rows, plans, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | rows | plans | query -----------+-------+------+-------+----------------------------------------------------- - f | 2 | 2 | 0 | INSERT INTO audit_table VALUES ($15, TG_OP, NEW.id) - t | 2 | 2 | 0 | INSERT INTO test_trigger VALUES ($1, $2) - t | 1 | 1 | 0 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(3 rows) + toplevel | calls | rows | plans | query +----------+-------+------+-------+------- +(0 rows) DROP TRIGGER audit_after_trigger ON test_trigger; DROP FUNCTION audit_trigger_func(); diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/planning.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/planning.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/planning.out 2026-05-19 05:57:58.289778000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/planning.out 2026-05-19 06:02:47.567558000 +0000 @@ -59,24 +59,17 @@ SELECT plans, calls, rows, query FROM pg_stat_statements WHERE query NOT LIKE 'PREPARE%' ORDER BY query COLLATE "C"; - plans | calls | rows | query --------+-------+------+---------------------------------------------------------- - 0 | 1 | 0 | ALTER TABLE stats_plan_test ADD COLUMN x int - 0 | 1 | 0 | CREATE TABLE stats_plan_test () - 3 | 3 | 3 | SELECT $1 - 0 | 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - 1 | 0 | 0 | SELECT plans, calls, rows, query FROM pg_stat_statements+ - | | | WHERE query NOT LIKE $1 ORDER BY query COLLATE "C" -(5 rows) + plans | calls | rows | query +-------+-------+------+------- +(0 rows) -- for the prepared statement we expect at least one replan, but cache -- invalidations could force more SELECT plans >= 2 AND plans <= calls AS plans_ok, calls, rows, query FROM pg_stat_statements WHERE query LIKE 'PREPARE%' ORDER BY query COLLATE "C"; - plans_ok | calls | rows | query -----------+-------+------+------------------------------------------------------- - t | 4 | 4 | PREPARE prep1 AS SELECT COUNT(*) FROM stats_plan_test -(1 row) + plans_ok | calls | rows | query +----------+-------+------+------- +(0 rows) -- Cleanup DROP TABLE stats_plan_test; diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/user_activity.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/user_activity.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/user_activity.out 2026-05-19 05:57:58.290417000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/user_activity.out 2026-05-19 06:02:47.761819000 +0000 @@ -39,19 +39,9 @@ RESET ROLE; SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls | rows -----------------------------------------------------+-------+------ - CREATE ROLE regress_stats_user1 | 1 | 0 - CREATE ROLE regress_stats_user2 | 1 | 0 - RESET ROLE | 2 | 0 - SELECT $1 AS "ONE" | 1 | 1 - SELECT $1 AS "ONE" | 1 | 1 - SELECT $1+$2 AS "TWO" | 1 | 1 - SELECT $1+$2 AS "TWO" | 1 | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 | 1 - SET ROLE regress_stats_user1 | 1 | 0 - SET ROLE regress_stats_user2 | 1 | 0 -(10 rows) + query | calls | rows +-------+-------+------ +(0 rows) -- -- Don't reset anything if any of the parameter is NULL @@ -63,21 +53,9 @@ (1 row) SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls | rows -------------------------------------------------------------------------------+-------+------ - CREATE ROLE regress_stats_user1 | 1 | 0 - CREATE ROLE regress_stats_user2 | 1 | 0 - RESET ROLE | 2 | 0 - SELECT $1 AS "ONE" | 1 | 1 - SELECT $1 AS "ONE" | 1 | 1 - SELECT $1+$2 AS "TWO" | 1 | 1 - SELECT $1+$2 AS "TWO" | 1 | 1 - SELECT pg_stat_statements_reset($1) IS NOT NULL AS t | 1 | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 | 1 - SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C" | 1 | 10 - SET ROLE regress_stats_user1 | 1 | 0 - SET ROLE regress_stats_user2 | 1 | 0 -(12 rows) + query | calls | rows +-------+-------+------ +(0 rows) -- -- remove query ('SELECT $1+$2 AS "TWO"') executed by regress_stats_user2 @@ -95,26 +73,20 @@ (1 row) SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls | rows -----------------------------------------------------------------------------------+-------+------ - CREATE ROLE regress_stats_user1 | 1 | 0 - CREATE ROLE regress_stats_user2 | 1 | 0 - RESET ROLE | 2 | 0 - SELECT $1 AS "ONE" | 1 | 1 - SELECT $1 AS "ONE" | 1 | 1 - SELECT $1+$2 AS "TWO" | 1 | 1 - SELECT pg_stat_statements_reset( +| 1 | 1 - (SELECT r.oid FROM pg_roles AS r WHERE r.rolname = $1), +| | - (SELECT d.oid FROM pg_database As d where datname = current_database()),+| | - (SELECT s.queryid FROM pg_stat_statements AS s +| | - WHERE s.query = $2 LIMIT $3)) +| | - IS NOT NULL AS t | | - SELECT pg_stat_statements_reset($1) IS NOT NULL AS t | 1 | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 | 1 - SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C" | 2 | 22 - SET ROLE regress_stats_user1 | 1 | 0 - SET ROLE regress_stats_user2 | 1 | 0 -(12 rows) + query | calls | rows +------------------------------------------------------------------------------+-------+------ + CREATE ROLE regress_stats_user1 | 1 | 0 + CREATE ROLE regress_stats_user2 | 1 | 0 + RESET ROLE | 2 | 0 + SELECT $1 AS "ONE" | 1 | 1 + SELECT $1 AS "ONE" | 1 | 1 + SELECT $1+$2 AS "TWO" | 1 | 1 + SELECT pg_stat_statements_reset($1) IS NOT NULL AS t | 1 | 1 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 | 1 + SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C" | 2 | 0 + SET ROLE regress_stats_user1 | 1 | 0 + SET ROLE regress_stats_user2 | 1 | 0 +(11 rows) -- -- remove query ('SELECT $1 AS "ONE"') executed by two users @@ -128,26 +100,18 @@ (2 rows) SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls | rows -----------------------------------------------------------------------------------+-------+------ - CREATE ROLE regress_stats_user1 | 1 | 0 - CREATE ROLE regress_stats_user2 | 1 | 0 - RESET ROLE | 2 | 0 - SELECT $1+$2 AS "TWO" | 1 | 1 - SELECT pg_stat_statements_reset( +| 1 | 1 - (SELECT r.oid FROM pg_roles AS r WHERE r.rolname = $1), +| | - (SELECT d.oid FROM pg_database As d where datname = current_database()),+| | - (SELECT s.queryid FROM pg_stat_statements AS s +| | - WHERE s.query = $2 LIMIT $3)) +| | - IS NOT NULL AS t | | - SELECT pg_stat_statements_reset($1) IS NOT NULL AS t | 1 | 1 - SELECT pg_stat_statements_reset($1,$2,s.queryid) IS NOT NULL AS t +| 1 | 2 - FROM pg_stat_statements AS s WHERE s.query = $3 | | - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 | 1 - SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C" | 3 | 34 - SET ROLE regress_stats_user1 | 1 | 0 - SET ROLE regress_stats_user2 | 1 | 0 -(11 rows) + query | calls | rows +------------------------------------------------------------------------------+-------+------ + CREATE ROLE regress_stats_user1 | 1 | 0 + CREATE ROLE regress_stats_user2 | 1 | 0 + RESET ROLE | 2 | 0 + SELECT $1+$2 AS "TWO" | 1 | 1 + SELECT pg_stat_statements_reset($1) IS NOT NULL AS t | 1 | 1 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 | 1 + SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C" | 2 | 0 + SET ROLE regress_stats_user1 | 1 | 0 + SET ROLE regress_stats_user2 | 1 | 0 +(9 rows) -- -- remove query of a user (regress_stats_user1) @@ -160,26 +124,16 @@ (1 row) SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls | rows -----------------------------------------------------------------------------------+-------+------ - CREATE ROLE regress_stats_user1 | 1 | 0 - CREATE ROLE regress_stats_user2 | 1 | 0 - RESET ROLE | 2 | 0 - SELECT pg_stat_statements_reset( +| 1 | 1 - (SELECT r.oid FROM pg_roles AS r WHERE r.rolname = $1), +| | - (SELECT d.oid FROM pg_database As d where datname = current_database()),+| | - (SELECT s.queryid FROM pg_stat_statements AS s +| | - WHERE s.query = $2 LIMIT $3)) +| | - IS NOT NULL AS t | | - SELECT pg_stat_statements_reset($1) IS NOT NULL AS t | 1 | 1 - SELECT pg_stat_statements_reset($1,$2,s.queryid) IS NOT NULL AS t +| 1 | 2 - FROM pg_stat_statements AS s WHERE s.query = $3 | | - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 | 1 - SELECT pg_stat_statements_reset(r.oid) IS NOT NULL AS t +| 1 | 1 - FROM pg_roles AS r WHERE r.rolname = $1 | | - SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C" | 4 | 45 - SET ROLE regress_stats_user2 | 1 | 0 -(10 rows) + query | calls | rows +------------------------------------------------------------------------------+-------+------ + CREATE ROLE regress_stats_user1 | 1 | 0 + CREATE ROLE regress_stats_user2 | 1 | 0 + RESET ROLE | 2 | 0 + SELECT pg_stat_statements_reset($1) IS NOT NULL AS t | 1 | 1 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 | 1 + SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C" | 2 | 0 + SET ROLE regress_stats_user2 | 1 | 0 +(7 rows) -- -- reset all @@ -191,10 +145,9 @@ (1 row) SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls | rows ----------------------------------------------------------+-------+------ - SELECT pg_stat_statements_reset(0,0,0) IS NOT NULL AS t | 1 | 1 -(1 row) + query | calls | rows +-------+-------+------ +(0 rows) -- -- cleanup diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/wal.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/wal.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/wal.out 2026-05-19 05:57:58.290723000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/wal.out 2026-05-19 06:02:47.822965000 +0000 @@ -13,14 +13,9 @@ wal_records > 0 as wal_records_generated, wal_records >= rows as wal_records_ge_rows FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls | rows | wal_bytes_generated | wal_records_generated | wal_records_ge_rows ---------------------------------------------------------------+-------+------+---------------------+-----------------------+--------------------- - DELETE FROM pgss_wal_tab WHERE a > $1 | 1 | 1 | t | t | t - INSERT INTO pgss_wal_tab VALUES(generate_series($1, $2), $3) | 1 | 10 | t | t | t - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 | 1 | f | f | f - SET pg_stat_statements.track_utility = $1 | 1 | 0 | f | f | t - UPDATE pgss_wal_tab SET b = $1 WHERE a > $2 | 1 | 3 | t | t | t -(5 rows) + query | calls | rows | wal_bytes_generated | wal_records_generated | wal_records_ge_rows +-------+-------+------+---------------------+-----------------------+--------------------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/entry_timestamp.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/entry_timestamp.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/entry_timestamp.out 2026-05-19 05:57:58.288841000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/entry_timestamp.out 2026-05-19 06:02:48.005403000 +0000 @@ -22,9 +22,7 @@ ORDER BY stats_since >= :'ref_ts'; ?column? | count ----------+------- - f | 1 - t | 1 -(2 rows) +(0 rows) SELECT now() AS ref_ts \gset SELECT @@ -45,13 +43,14 @@ WHERE query LIKE '%STMTTS%'; total | minmax_plan_zero | minmax_exec_zero | minmax_stats_since_after_ref | stats_since_after_ref -------+------------------+------------------+------------------------------+----------------------- - 2 | 0 | 0 | 0 | 0 + 0 | 0 | 0 | 0 | 0 (1 row) -- Perform single min/max reset SELECT pg_stat_statements_reset(0, 0, queryid, true) AS minmax_reset_ts FROM pg_stat_statements WHERE query LIKE '%STMTTS1%' \gset +no rows returned for \gset -- check SELECT count(*) as total, @@ -71,7 +70,7 @@ WHERE query LIKE '%STMTTS%'; total | minmax_plan_zero | minmax_exec_zero | minmax_stats_since_after_ref | stats_since_after_ref -------+------------------+------------------+------------------------------+----------------------- - 2 | 1 | 1 | 1 | 0 + 0 | 0 | 0 | 0 | 0 (1 row) -- check minmax reset timestamps @@ -80,21 +79,16 @@ FROM pg_stat_statements WHERE query LIKE '%STMTTS%' ORDER BY query COLLATE "C"; - query | reset_ts_match ----------------------------+---------------- - SELECT $1 AS "STMTTS1" | t - SELECT $1,$2 AS "STMTTS2" | f -(2 rows) - +ERROR: syntax error at or near ":" +LINE 2: query, minmax_stats_since = :'minmax_reset_ts' AS reset_ts_m... + ^ -- check that minmax reset does not set stats_reset SELECT stats_reset = :'minmax_reset_ts' AS stats_reset_ts_match FROM pg_stat_statements_info; - stats_reset_ts_match ----------------------- - f -(1 row) - +ERROR: syntax error at or near ":" +LINE 2: stats_reset = :'minmax_reset_ts' AS stats_reset_ts_match + ^ -- Perform common min/max reset SELECT pg_stat_statements_reset(0, 0, 0, true) AS minmax_reset_ts \gset -- check again @@ -119,7 +113,7 @@ WHERE query LIKE '%STMTTS%'; total | minmax_plan_zero | minmax_exec_zero | minmax_ts_after_ref | minmax_ts_match | stats_since_after_ref -------+------------------+------------------+---------------------+-----------------+----------------------- - 2 | 2 | 2 | 2 | 2 | 0 + 0 | 0 | 0 | 0 | 0 | 0 (1 row) -- Execute first query once more to check stats update @@ -147,7 +141,7 @@ WHERE query LIKE '%STMTTS%'; total | minmax_exec_zero | minmax_ts_after_ref | stats_since_after_ref -------+------------------+---------------------+----------------------- - 2 | 1 | 2 | 0 + 0 | 0 | 0 | 0 (1 row) -- Cleanup diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/privileges.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/privileges.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/privileges.out 2026-05-19 05:57:58.289851000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/privileges.out 2026-05-19 06:02:48.142615000 +0000 @@ -36,12 +36,9 @@ SELECT r.rolname, ss.queryid <> 0 AS queryid_bool, ss.query, ss.calls, ss.rows FROM pg_stat_statements ss JOIN pg_roles r ON ss.userid = r.oid ORDER BY r.rolname, ss.query COLLATE "C", ss.calls, ss.rows; - rolname | queryid_bool | query | calls | rows --------------------------+--------------+----------------------------------------------------+-------+------ - regress_stats_superuser | t | SELECT $1 AS "ONE" | 1 | 1 - regress_stats_superuser | t | SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 | 1 - regress_stats_user1 | t | SELECT $1+$2 AS "TWO" | 1 | 1 -(3 rows) + rolname | queryid_bool | query | calls | rows +---------+--------------+-------+-------+------ +(0 rows) -- -- regress_stats_user1 has no privileges to read the query text or @@ -52,13 +49,9 @@ SELECT r.rolname, ss.queryid <> 0 AS queryid_bool, ss.query, ss.calls, ss.rows FROM pg_stat_statements ss JOIN pg_roles r ON ss.userid = r.oid ORDER BY r.rolname, ss.query COLLATE "C", ss.calls, ss.rows; - rolname | queryid_bool | query | calls | rows --------------------------+--------------+--------------------------+-------+------ - regress_stats_superuser | | | 1 | 1 - regress_stats_superuser | | | 1 | 1 - regress_stats_superuser | | | 1 | 3 - regress_stats_user1 | t | SELECT $1+$2 AS "TWO" | 1 | 1 -(4 rows) + rolname | queryid_bool | query | calls | rows +---------+--------------+-------+-------+------ +(0 rows) -- -- regress_stats_user2, with pg_read_all_stats role privileges, can @@ -69,18 +62,9 @@ SELECT r.rolname, ss.queryid <> 0 AS queryid_bool, ss.query, ss.calls, ss.rows FROM pg_stat_statements ss JOIN pg_roles r ON ss.userid = r.oid ORDER BY r.rolname, ss.query COLLATE "C", ss.calls, ss.rows; - rolname | queryid_bool | query | calls | rows --------------------------+--------------+---------------------------------------------------------------------------------+-------+------ - regress_stats_superuser | t | SELECT $1 AS "ONE" | 1 | 1 - regress_stats_superuser | t | SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 | 1 - regress_stats_superuser | t | SELECT r.rolname, ss.queryid <> $1 AS queryid_bool, ss.query, ss.calls, ss.rows+| 1 | 3 - | | FROM pg_stat_statements ss JOIN pg_roles r ON ss.userid = r.oid +| | - | | ORDER BY r.rolname, ss.query COLLATE "C", ss.calls, ss.rows | | - regress_stats_user1 | t | SELECT $1+$2 AS "TWO" | 1 | 1 - regress_stats_user1 | t | SELECT r.rolname, ss.queryid <> $1 AS queryid_bool, ss.query, ss.calls, ss.rows+| 1 | 4 - | | FROM pg_stat_statements ss JOIN pg_roles r ON ss.userid = r.oid +| | - | | ORDER BY r.rolname, ss.query COLLATE "C", ss.calls, ss.rows | | -(5 rows) + rolname | queryid_bool | query | calls | rows +---------+--------------+-------+-------+------ +(0 rows) -- -- cleanup diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/extended.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/extended.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/extended.out 2026-05-19 05:57:58.288919000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/extended.out 2026-05-19 06:02:48.450734000 +0000 @@ -60,13 +60,9 @@ (1 row) SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+---------------------------------------------------- - 3 | 3 | SELECT $1 - 2 | 2 | SELECT $1, $2 - 2 | 2 | SELECT $1, $2, $3 - 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(4 rows) + calls | rows | query +-------+------+------- +(0 rows) -- Various parameter numbering patterns -- Unique query IDs with parameter numbers switched. @@ -97,15 +93,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls ---------------------------------------------------------------+------- - SELECT WHERE $1::int IN ($2 /*, ... */) | 1 - SELECT WHERE $1::int IN ($2 /*, ... */) | 1 - SELECT WHERE $1::int IN ($2 /*, ... */) | 1 - SELECT WHERE ($1::int, $4) IN (($5, $2::int), ($3::int, $6)) | 1 - SELECT WHERE ($2::int, $4) IN (($5, $3::int), ($1::int, $6)) | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(6 rows) + query | calls +-------+------- +(0 rows) -- Two groups of two queries with the same query ID. SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -131,12 +121,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------+------- - SELECT WHERE $1::int IN ($2 /*, ... */) | 2 - SELECT WHERE $1::int IN ($2 /*, ... */) | 2 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(3 rows) + query | calls +-------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -155,10 +142,7 @@ (1 row) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -------------------------------------------------------------+------- - SELECT WHERE $1 IN ($2 /*, ... */) AND $3 = $4 AND $5 = $6 | 1 - SELECT WHERE $3 = $1 AND $2 = $4 | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(3 rows) + query | calls +-------+------- +(0 rows) diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/parallel.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/parallel.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/parallel.out 2026-05-19 05:57:58.289623000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/parallel.out 2026-05-19 06:02:48.550162000 +0000 @@ -26,9 +26,8 @@ FROM pg_stat_statements WHERE query ~ 'SELECT count' ORDER BY query COLLATE "C"; - query | has_workers_to_launch | has_workers_launched -----------------------------------------+-----------------------+---------------------- - SELECT count(*) FROM pgss_parallel_tab | t | t -(1 row) + query | has_workers_to_launch | has_workers_launched +-------+-----------------------+---------------------- +(0 rows) DROP TABLE pgss_parallel_tab; diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/plancache.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/plancache.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/plancache.out 2026-05-19 05:57:58.289718000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/plancache.out 2026-05-19 06:02:48.911642000 +0000 @@ -40,12 +40,9 @@ SELECT calls, generic_plan_calls, custom_plan_calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | generic_plan_calls | custom_plan_calls | query --------+--------------------+-------------------+---------------------------------------------------- - 2 | 1 | 1 | PREPARE p1 AS SELECT $1 AS a - 1 | 0 | 0 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - 2 | 0 | 0 | SET plan_cache_mode TO $1 -(3 rows) + calls | generic_plan_calls | custom_plan_calls | query +-------+--------------------+-------------------+------- +(0 rows) DEALLOCATE p1; -- Extended query protocol @@ -74,12 +71,9 @@ SELECT calls, generic_plan_calls, custom_plan_calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | generic_plan_calls | custom_plan_calls | query --------+--------------------+-------------------+---------------------------------------------------- - 2 | 1 | 1 | SELECT $1 AS a - 1 | 0 | 0 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - 2 | 0 | 0 | SET plan_cache_mode TO $1 -(3 rows) + calls | generic_plan_calls | custom_plan_calls | query +-------+--------------------+-------------------+------- +(0 rows) \close_prepared p1 -- EXPLAIN [ANALYZE] EXECUTE @@ -119,14 +113,9 @@ SELECT calls, generic_plan_calls, custom_plan_calls, toplevel, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | generic_plan_calls | custom_plan_calls | toplevel | query --------+--------------------+-------------------+----------+---------------------------------------------------------------------------------- - 2 | 0 | 0 | t | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) EXECUTE p1(1) - 2 | 0 | 0 | t | EXPLAIN (COSTS OFF) EXECUTE p1(1) - 4 | 2 | 2 | f | PREPARE p1 AS SELECT $1 - 1 | 0 | 0 | t | SELECT pg_stat_statements_reset() IS NOT NULL AS t - 2 | 0 | 0 | t | SET plan_cache_mode TO $1 -(5 rows) + calls | generic_plan_calls | custom_plan_calls | toplevel | query +-------+--------------------+-------------------+----------+------- +(0 rows) RESET pg_stat_statements.track; DEALLOCATE p1; @@ -156,13 +145,9 @@ CALL select_one_proc(1); SELECT calls, generic_plan_calls, custom_plan_calls, toplevel, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | generic_plan_calls | custom_plan_calls | toplevel | query --------+--------------------+-------------------+----------+---------------------------------------------------- - 2 | 0 | 0 | t | CALL select_one_proc($1) - 1 | 0 | 0 | t | SELECT pg_stat_statements_reset() IS NOT NULL AS t - 2 | 0 | 0 | t | SELECT select_one_func($1) - 2 | 0 | 0 | t | SET plan_cache_mode TO $1 -(4 rows) + calls | generic_plan_calls | custom_plan_calls | toplevel | query +-------+--------------------+-------------------+----------+------- +(0 rows) -- -- EXPLAIN [ANALYZE] EXECUTE + functions/procedures @@ -204,15 +189,9 @@ CALL select_one_proc(1); SELECT calls, generic_plan_calls, custom_plan_calls, toplevel, query FROM pg_stat_statements ORDER BY query COLLATE "C", toplevel; - calls | generic_plan_calls | custom_plan_calls | toplevel | query --------+--------------------+-------------------+----------+------------------------------------------------------------------------------------------------ - 2 | 0 | 0 | t | CALL select_one_proc($1) - 2 | 0 | 0 | t | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT select_one_func($1) - 4 | 0 | 0 | f | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT select_one_func($1); - 2 | 0 | 0 | t | EXPLAIN (COSTS OFF) SELECT select_one_func($1) - 1 | 0 | 0 | t | SELECT pg_stat_statements_reset() IS NOT NULL AS t - 2 | 0 | 0 | t | SET plan_cache_mode TO $1 -(6 rows) + calls | generic_plan_calls | custom_plan_calls | toplevel | query +-------+--------------------+-------------------+----------+------- +(0 rows) RESET pg_stat_statements.track; -- @@ -247,10 +226,9 @@ SELECT calls, query FROM pg_stat_statements WHERE query LIKE '%rollback_proc%' ORDER BY query COLLATE "C"; - calls | query --------+------------------------ - 2 | CALL rollback_proc($1) -(1 row) + calls | query +-------+------- +(0 rows) DROP PROCEDURE rollback_proc; -- diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/squashing.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/squashing.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/squashing.out 2026-05-19 05:57:58.290311000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/squashing.out 2026-05-19 06:02:50.398469000 +0000 @@ -24,12 +24,9 @@ (1 row) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------+------- - SELECT * FROM test_squash WHERE id IN ($1) | 1 - SELECT ARRAY[$1] | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(3 rows) + query | calls +-------+------- +(0 rows) -- more than 1 element in a list will be squashed SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -72,12 +69,9 @@ (1 row) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls --------------------------------------------------------+------- - SELECT * FROM test_squash WHERE id IN ($1 /*, ... */) | 3 - SELECT ARRAY[$1 /*, ... */] | 3 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(3 rows) + query | calls +-------+------- +(0 rows) -- built-in functions will be squashed -- the IN and ARRAY forms of this statement will have the same queryId @@ -96,11 +90,9 @@ (1 row) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------+------- - SELECT WHERE $1 IN ($2 /*, ... */) | 2 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +-------+------- +(0 rows) -- external parameters will be squashed SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -122,12 +114,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------------------------+------- - SELECT * FROM test_squash WHERE id IN ($1 /*, ... */) | 1 - SELECT * FROM test_squash WHERE id::text = ANY(ARRAY[$1 /*, ... */]) | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(3 rows) + query | calls +-------+------- +(0 rows) -- prepared statements will also be squashed -- the IN and ARRAY forms of this statement will have the same queryId @@ -154,13 +143,9 @@ DEALLOCATE p1; SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls --------------------------------------------------------+------- - DEALLOCATE $1 | 2 - PREPARE p1(int, int, int, int, int) AS +| 2 - SELECT * FROM test_squash WHERE id IN ($1 /*, ... */) | - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(3 rows) + query | calls +-------+------- +(0 rows) -- More conditions in the query SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -200,11 +185,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls ----------------------------------------------------------------------+------- - SELECT * FROM test_squash WHERE id IN ($1 /*, ... */) AND data = $2 | 6 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +-------+------- +(0 rows) -- Multiple squashed intervals SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -250,12 +233,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls --------------------------------------------------------+------- - SELECT * FROM test_squash WHERE id IN ($1 /*, ... */)+| 6 - AND data IN ($2 /*, ... */) | - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +-------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -296,14 +276,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------------------------------------------------------+------- - SELECT * FROM test_squash WHERE id IN +| 2 - ($1 + $2, $3 + $4, $5 + $6, $7 + $8, $9 + $10, $11 + $12, $13 + $14, $15 + $16, $17 + $18) | - SELECT * FROM test_squash WHERE id IN +| 2 - (@ $1, @ $2, @ $3, @ $4, @ $5, @ $6, @ $7, @ $8, @ $9) | - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(3 rows) + query | calls +-------+------- +(0 rows) -- -- FuncExpr @@ -369,12 +344,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls ---------------------------------------------------------------------+------- - SELECT data FROM test_float WHERE data = ANY(ARRAY[$1 /*, ... */]) | 3 - SELECT data FROM test_float WHERE data IN ($1 /*, ... */) | 7 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(3 rows) + query | calls +-------+------- +(0 rows) -- Numeric type, implicit cast is squashed CREATE TABLE test_squash_numeric (id int, data numeric(5, 2)); @@ -395,12 +367,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls ---------------------------------------------------------------------------+------- - SELECT * FROM test_squash_numeric WHERE data = ANY(ARRAY[$1 /*, ... */]) | 1 - SELECT * FROM test_squash_numeric WHERE data IN ($1 /*, ... */) | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(3 rows) + query | calls +-------+------- +(0 rows) -- Bigint, implicit cast is squashed CREATE TABLE test_squash_bigint (id int, data bigint); @@ -421,12 +390,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls --------------------------------------------------------------------------+------- - SELECT * FROM test_squash_bigint WHERE data = ANY(ARRAY[$1 /*, ... */]) | 1 - SELECT * FROM test_squash_bigint WHERE data IN ($1 /*, ... */) | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(3 rows) + query | calls +-------+------- +(0 rows) -- Bigint, explicit cast is squashed SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -450,12 +416,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------+------- - SELECT * FROM test_squash_bigint WHERE data IN +| 2 - ($1 /*, ... */) | - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +-------+------- +(0 rows) -- Bigint, long tokens with parenthesis, will not squash SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -479,13 +442,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls --------------------------------------------------------------------------+------- - SELECT * FROM test_squash_bigint WHERE id IN +| 2 - (abs($1), abs($2), abs($3), abs($4), abs($5), abs($6), abs($7),+| - abs($8), abs($9), abs($10), ((abs($11)))) | - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +-------+------- +(0 rows) -- Multiple FuncExpr's. Will not squash SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -503,11 +462,9 @@ (1 row) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------+------- - SELECT WHERE $1 IN ($2 /*, ... */) | 2 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +-------+------- +(0 rows) -- -- CoerceViaIO @@ -569,12 +526,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------+------- - SELECT * FROM test_squash_cast WHERE data IN +| 2 - ($1 /*, ... */) | - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +-------+------- +(0 rows) -- Some casting expression are simplified to Const CREATE TABLE test_squash_jsonb (id int, data jsonb); @@ -601,12 +555,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------+------- - SELECT * FROM test_squash_jsonb WHERE data IN +| 2 - ($1 /*, ... */) | - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +-------+------- +(0 rows) -- CoerceViaIO, SubLink instead of a Const. Will not squash SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -634,15 +585,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------------------------+------- - SELECT * FROM test_squash_jsonb WHERE data IN +| 2 - ((SELECT $1)::jsonb, (SELECT $2)::jsonb, (SELECT $3)::jsonb,+| - (SELECT $4)::jsonb, (SELECT $5)::jsonb, (SELECT $6)::jsonb,+| - (SELECT $7)::jsonb, (SELECT $8)::jsonb, (SELECT $9)::jsonb,+| - (SELECT $10)::jsonb) | - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +-------+------- +(0 rows) -- Multiple CoerceViaIO are squashed SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -660,11 +605,9 @@ (1 row) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------+------- - SELECT WHERE $1 IN ($2 /*, ... */) | 2 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +-------+------- +(0 rows) -- -- RelabelType @@ -710,13 +653,11 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------+------- - SELECT * FROM test_squash WHERE id IN +| 5 - ($1 /*, ... */) | - SELECT ARRAY[$1 /*, ... */] | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(3 rows) + query | calls +---------------------------------------+------- + SELECT * FROM test_squash WHERE id IN+| 1 + ($1 /*, ... */) | +(1 row) -- -- edge cases @@ -740,16 +681,9 @@ (1 row) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------+------- - SELECT ARRAY[ +| 1 - ARRAY[$1 /*, ... */], +| - ARRAY[$2 /*, ... */], +| - ARRAY[$3 /*, ... */], +| - ARRAY[$4 /*, ... */] +| - ] | - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +-------+------- +(0 rows) -- Test constants evaluation in a CTE, which was causing issues in the past WITH cte AS ( @@ -778,12 +712,9 @@ (1 row) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------+------- - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 - select where $1 IN ($2 /*, ... */) | 1 - select where $1 IN ($2::int, $3::int::text) | 1 -(3 rows) + query | calls +-------+------- +(0 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t @@ -802,11 +733,9 @@ (1 row) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------+------- - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 - select where $1 IN ($2 /*, ... */) | 2 -(2 rows) + query | calls +-------+------- +(0 rows) -- composite function with row expansion create table test_composite(x integer); @@ -889,22 +818,9 @@ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls --------------------------------------------------------------------------------------------------------------+------- - SELECT $1, $2, (ROW(ARRAY[$3 /*, ... */], ARRAY[$4 /*, ... */])).*, $5, $6 | 1 - SELECT ((composite_f(array[$1 /*, ... */]))).* FROM test_composite | 2 - SELECT ((composite_f(array[$1 /*, ... */]))).*, $2 FROM test_composite | 1 - SELECT ((composite_f(array[$1 /*, ... */]))).*, $2, $3, $4, ((composite_f(array[$5 /*, ... */]))).*, $6, $7+| 1 - FROM test_composite +| - WHERE x IN ($8 /*, ... */) | - SELECT (ROW(ARRAY[$1 /*, ... */])).* | 1 - SELECT (ROW(ARRAY[$1 /*, ... */], ARRAY[$2 /*, ... */])).* | 1 - SELECT (ROW(ARRAY[$1 /*, ... */], ARRAY[$2 /*, ... */])).*, $3 | 1 - SELECT * FROM test_squash a, test_squash b WHERE a.id = ANY (array[$1, ((b.id + b.id * $2)), $3]) | 1 - SELECT * FROM test_squash a, test_squash b WHERE a.id IN ($1, $2, $3, b.id, b.id + $4) | 1 - SELECT * FROM test_squash a, test_squash b WHERE a.id IN ($1, $2, $3, b.id, b.id + $4) | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(11 rows) + query | calls +-------+------- +(0 rows) -- -- cleanup diff -U3 /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/oldextversions.out /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/oldextversions.out --- /tmp/cirrus-ci-build/contrib/pg_stat_statements/expected/oldextversions.out 2026-05-19 05:57:58.289570000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/pg_stat_statements/regress/results/oldextversions.out 2026-05-19 06:02:50.871986000 +0000 @@ -89,7 +89,7 @@ SELECT count(*) > 0 AS has_data FROM pg_stat_statements; has_data ---------- - t + f (1 row) -- New functions and views for pg_stat_statements in 1.8 @@ -145,7 +145,7 @@ SELECT count(*) > 0 AS has_data FROM pg_stat_statements; has_data ---------- - t + f (1 row) -- New function pg_stat_statement_info, and new function @@ -203,7 +203,7 @@ SELECT count(*) > 0 AS has_data FROM pg_stat_statements; has_data ---------- - t + f (1 row) -- New functions and views for pg_stat_statements in 1.10 @@ -259,7 +259,7 @@ SELECT count(*) > 0 AS has_data FROM pg_stat_statements; has_data ---------- - t + f (1 row) -- New functions and views for pg_stat_statements in 1.11 @@ -321,7 +321,7 @@ SELECT count(*) > 0 AS has_data FROM pg_stat_statements; has_data ---------- - t + f (1 row) -- New parameter minmax_only of pg_stat_statements_reset function @@ -404,7 +404,7 @@ SELECT count(*) > 0 AS has_data FROM pg_stat_statements; has_data ---------- - t + f (1 row) -- New functions and views for pg_stat_statements in 1.13 @@ -471,7 +471,7 @@ SELECT count(*) > 0 AS has_data FROM pg_stat_statements; has_data ---------- - t + f (1 row) DROP EXTENSION pg_stat_statements;