diff options
author | Michael Paquier <michael@paquier.xyz> | 2024-10-28 09:03:20 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2024-10-28 09:03:20 +0900 |
commit | 6b652e6ce85a977e4ca7b8cc045cf4f3457b2d7b (patch) | |
tree | 4bfc5d62944f27cf0fd838046eb9e95bae034bac /contrib/pg_stat_statements | |
parent | 33b2fbe0504bd349c3bb86e8711f5531c8ca84b7 (diff) | |
download | postgresql-6b652e6ce85a977e4ca7b8cc045cf4f3457b2d7b.tar.gz postgresql-6b652e6ce85a977e4ca7b8cc045cf4f3457b2d7b.zip |
Set query ID for inner queries of CREATE TABLE AS and DECLARE
Some utility statements contain queries that can be planned and
executed: CREATE TABLE AS and DECLARE CURSOR. This commit adds query ID
computation for the inner queries executed by these two utility
commands, with and without EXPLAIN. This change leads to four new
callers of JumbleQuery() and post_parse_analyze_hook() so as extensions
can decide what to do with this new data.
Previously, extensions relying on the query ID, like pg_stat_statements,
were not able to track these nested queries as the query_id was 0.
For pg_stat_statements, this commit leads to additions under !toplevel
when pg_stat_statements.track is set to "all", as shown in its
regression tests. The output of EXPLAIN for these two utilities gains a
"Query Identifier" if compute_query_id is enabled.
Author: Anthonin Bonnefoy
Reviewed-by: Michael Paquier, Jian He
Discussion: https://postgr.es/m/CAO6_XqqM6S9bQ2qd=75W+yKATwoazxSNhv5sjW06fjGAtHbTUA@mail.gmail.com
Diffstat (limited to 'contrib/pg_stat_statements')
-rw-r--r-- | contrib/pg_stat_statements/expected/level_tracking.out | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/contrib/pg_stat_statements/expected/level_tracking.out b/contrib/pg_stat_statements/expected/level_tracking.out index 489dc7143f7..9aee9f5010e 100644 --- a/contrib/pg_stat_statements/expected/level_tracking.out +++ b/contrib/pg_stat_statements/expected/level_tracking.out @@ -924,8 +924,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements | | DECLARE foocur CURSOR FOR SELECT * FROM stats_track_tab t | 1 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT $1 f | 1 | SELECT $1 + f | 1 | SELECT * FROM stats_track_tab t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(4 rows) +(5 rows) -- Explain analyze, top tracking. SET pg_stat_statements.track = 'top'; @@ -1047,9 +1048,10 @@ SELECT toplevel, calls, query FROM pg_stat_statements ----------+-------+----------------------------------------------------------------- t | 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 | SELECT $1 t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t f | 1 | select generate_series($1, $2) -(4 rows) +(5 rows) -- CREATE TABLE AS, top-level tracking. SET pg_stat_statements.track = 'top'; @@ -1089,8 +1091,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements toplevel | calls | query ----------+-------+--------------------------------------------------------------------------- t | 1 | EXPLAIN (COSTS OFF) CREATE TEMPORARY TABLE pgss_explain_ctas AS SELECT $1 + f | 1 | SELECT $1 t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(2 rows) +(3 rows) -- EXPLAIN with CREATE TABLE AS - top-level tracking. SET pg_stat_statements.track = 'top'; @@ -1140,8 +1143,9 @@ SELECT toplevel, calls, query FROM pg_stat_statements t | 1 | COMMIT t | 1 | DECLARE FOOCUR CURSOR FOR SELECT * from stats_track_tab t | 1 | FETCH FORWARD 1 FROM foocur + f | 1 | SELECT * from stats_track_tab t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(6 rows) +(7 rows) -- DECLARE CURSOR, top-level tracking. SET pg_stat_statements.track = 'top'; |