diff options
author | Michael Paquier <michael@paquier.xyz> | 2023-08-27 17:27:44 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2023-08-27 17:27:44 +0900 |
commit | bb45156f342c2cdb88cdd7f9efdc4541e910ec86 (patch) | |
tree | 630d2e17fc3afab41b7c5ddcda653628a7f2fddd /src/backend/parser | |
parent | e48b19c5db3185e1868391176fc040df08a149fb (diff) | |
download | postgresql-bb45156f342c2cdb88cdd7f9efdc4541e910ec86.tar.gz postgresql-bb45156f342c2cdb88cdd7f9efdc4541e910ec86.zip |
Show names of DEALLOCATE as constants in pg_stat_statements
This commit switches query jumbling so as prepared statement names are
treated as constants in DeallocateStmt. A boolean field is added to
DeallocateStmt to make a distinction between ALL and named prepared
statements, as "name" was used to make this difference before, NULL
meaning DEALLOCATE ALL.
Prior to this commit, DEALLOCATE was not tracked in pg_stat_statements,
for the reason that it was not possible to treat its name parameter as a
constant. Now that query jumbling applies to all the utility nodes,
this reason does not apply anymore.
Like 638d42a3c520, this can be a huge advantage for monitoring where
prepared statement names are randomly generated, preventing bloat in
pg_stat_statements. A couple of tests are added to track the new
behavior.
Author: Dagfinn Ilmari Mannsåker, Michael Paquier
Reviewed-by: Julien Rouhaud
Discussion: https://postgr.es/m/ZMhT9kNtJJsHw6jK@paquier.xyz
Diffstat (limited to 'src/backend/parser')
-rw-r--r-- | src/backend/parser/gram.y | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 1b0e9e58195..7d2032885ed 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11953,6 +11953,8 @@ DeallocateStmt: DEALLOCATE name DeallocateStmt *n = makeNode(DeallocateStmt); n->name = $2; + n->isall = false; + n->location = @2; $$ = (Node *) n; } | DEALLOCATE PREPARE name @@ -11960,6 +11962,8 @@ DeallocateStmt: DEALLOCATE name DeallocateStmt *n = makeNode(DeallocateStmt); n->name = $3; + n->isall = false; + n->location = @3; $$ = (Node *) n; } | DEALLOCATE ALL @@ -11967,6 +11971,8 @@ DeallocateStmt: DEALLOCATE name DeallocateStmt *n = makeNode(DeallocateStmt); n->name = NULL; + n->isall = true; + n->location = -1; $$ = (Node *) n; } | DEALLOCATE PREPARE ALL @@ -11974,6 +11980,8 @@ DeallocateStmt: DEALLOCATE name DeallocateStmt *n = makeNode(DeallocateStmt); n->name = NULL; + n->isall = true; + n->location = -1; $$ = (Node *) n; } ; |