Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc145f32

Browse files
committed
Propagate query IDs of utility statements in functions
For utility statements defined within a function, the query tree iscopied to a PlannedStmt as utility commands do not require planning.However, the query ID was missing from the information passed down.This leads to plugins relying on the query ID like pg_stat_statements tonot be able to track utility statements within function calls. Testsare added to check this behavior, depending on pg_stat_statements.track.This is an old bug. Now, query IDs for utilities are compiled usingtheir parsed trees rather than the query string since v16(3db72eb), leading to less bloat with utilities, so backpatch downonly to this version.Author: Anthonin BonnefoyDiscussion:https://postgr.es/m/CAO6_XqrGp-uwBqi3vBPLuRULKkddjC7R5QZCgsFren=8E+m2Sg@mail.gmail.comBackpatch-through: 16
1 parentcd85ae1 commitc145f32

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

‎contrib/pg_stat_statements/expected/level_tracking.out

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,51 @@ SELECT toplevel, calls, query FROM pg_stat_statements
6767
t | 1 | SET pg_stat_statements.track = 'all'
6868
(7 rows)
6969

70+
-- Procedure with multiple utility statements.
71+
CREATE OR REPLACE PROCEDURE proc_with_utility_stmt()
72+
LANGUAGE SQL
73+
AS $$
74+
SHOW pg_stat_statements.track;
75+
show pg_stat_statements.track;
76+
SHOW pg_stat_statements.track_utility;
77+
$$;
78+
SET pg_stat_statements.track_utility = TRUE;
79+
-- all-level tracking.
80+
SET pg_stat_statements.track = 'all';
81+
SELECT pg_stat_statements_reset() IS NOT NULL AS t;
82+
t
83+
---
84+
t
85+
(1 row)
86+
87+
CALL proc_with_utility_stmt();
88+
SELECT toplevel, calls, query FROM pg_stat_statements
89+
ORDER BY query COLLATE "C", toplevel;
90+
toplevel | calls | query
91+
----------+-------+----------------------------------------------------
92+
t | 1 | CALL proc_with_utility_stmt()
93+
t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t
94+
f | 2 | SHOW pg_stat_statements.track
95+
f | 1 | SHOW pg_stat_statements.track_utility
96+
(4 rows)
97+
98+
-- top-level tracking.
99+
SET pg_stat_statements.track = 'top';
100+
SELECT pg_stat_statements_reset() IS NOT NULL AS t;
101+
t
102+
---
103+
t
104+
(1 row)
105+
106+
CALL proc_with_utility_stmt();
107+
SELECT toplevel, calls, query FROM pg_stat_statements
108+
ORDER BY query COLLATE "C", toplevel;
109+
toplevel | calls | query
110+
----------+-------+----------------------------------------------------
111+
t | 1 | CALL proc_with_utility_stmt()
112+
t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t
113+
(2 rows)
114+
70115
-- DO block - top-level tracking without utility.
71116
SET pg_stat_statements.track = 'top';
72117
SET pg_stat_statements.track_utility = FALSE;

‎contrib/pg_stat_statements/sql/level_tracking.sql

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,28 @@ END; $$;
3333
SELECT toplevel, calls, queryFROM pg_stat_statements
3434
ORDER BY query COLLATE"C", toplevel;
3535

36+
-- Procedure with multiple utility statements.
37+
CREATEOR REPLACE PROCEDURE proc_with_utility_stmt()
38+
LANGUAGE SQL
39+
AS $$
40+
SHOWpg_stat_statements.track;
41+
showpg_stat_statements.track;
42+
SHOWpg_stat_statements.track_utility;
43+
$$;
44+
SETpg_stat_statements.track_utility= TRUE;
45+
-- all-level tracking.
46+
SETpg_stat_statements.track='all';
47+
SELECT pg_stat_statements_reset()IS NOT NULLAS t;
48+
CALL proc_with_utility_stmt();
49+
SELECT toplevel, calls, queryFROM pg_stat_statements
50+
ORDER BY query COLLATE"C", toplevel;
51+
-- top-level tracking.
52+
SETpg_stat_statements.track='top';
53+
SELECT pg_stat_statements_reset()IS NOT NULLAS t;
54+
CALL proc_with_utility_stmt();
55+
SELECT toplevel, calls, queryFROM pg_stat_statements
56+
ORDER BY query COLLATE"C", toplevel;
57+
3658
-- DO block - top-level tracking without utility.
3759
SETpg_stat_statements.track='top';
3860
SETpg_stat_statements.track_utility= FALSE;

‎src/backend/executor/functions.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,7 @@ init_execution_state(List *queryTree_list,
492492
stmt->utilityStmt=queryTree->utilityStmt;
493493
stmt->stmt_location=queryTree->stmt_location;
494494
stmt->stmt_len=queryTree->stmt_len;
495+
stmt->queryId=queryTree->queryId;
495496
}
496497
else
497498
stmt=pg_plan_query(queryTree,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp