diff options
author | Michael Paquier <michael@paquier.xyz> | 2023-02-07 09:03:54 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2023-02-07 09:03:54 +0900 |
commit | 9ba37b2cb6a174b37fc51d0649ef73e56eae27fc (patch) | |
tree | 8da54ff6c6e95f26dd029be745308a3625c310c3 /contrib/pg_stat_statements | |
parent | 209f0f0e8516dfb382afdd2375c8b84c912dc420 (diff) | |
download | postgresql-9ba37b2cb6a174b37fc51d0649ef73e56eae27fc.tar.gz |
Include values of A_Const nodes in query jumbling
Like the implementation for node copy, write and read, this node
requires a custom implementation so as the query jumbling is able to
consider the correct value assigned to it, depending on its type (int,
float, bool, string, bitstring).
Based on a dump of pg_stat_statements from the regression database, this
would confuse the query jumbling of the following queries:
- SET.
- COPY TO with SELECT queries.
- START TRANSACTION with different isolation levels.
- ALTER TABLE with default expressions.
- CREATE TABLE with partition bounds.
Note that there may be a long-term argument in tracking the location of
such nodes so as query strings holding such nodes could be normalized,
but this is left as a separate discussion.
Oversight in 3db72eb.
Discussion: https://postgr.es/m/Y9+HuYslMAP6yyPb@paquier.xyz
Diffstat (limited to 'contrib/pg_stat_statements')
-rw-r--r-- | contrib/pg_stat_statements/expected/pg_stat_statements.out | 16 | ||||
-rw-r--r-- | contrib/pg_stat_statements/sql/pg_stat_statements.sql | 8 |
2 files changed, 23 insertions, 1 deletions
diff --git a/contrib/pg_stat_statements/expected/pg_stat_statements.out b/contrib/pg_stat_statements/expected/pg_stat_statements.out index fb9ccd920f..8c0b2235e8 100644 --- a/contrib/pg_stat_statements/expected/pg_stat_statements.out +++ b/contrib/pg_stat_statements/expected/pg_stat_statements.out @@ -579,6 +579,14 @@ NOTICE: table "test" does not exist, skipping NOTICE: table "test" does not exist, skipping NOTICE: function plus_one(pg_catalog.int4) does not exist, skipping DROP FUNCTION PLUS_TWO(INTEGER); +-- This SET query uses two different strings, still they count as one entry. +SET work_mem = '1MB'; +Set work_mem = '1MB'; +SET work_mem = '2MB'; +RESET work_mem; +SET enable_seqscan = off; +SET enable_seqscan = on; +RESET enable_seqscan; SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C"; query | calls | rows ------------------------------------------------------------------------------+-------+------ @@ -588,10 +596,16 @@ SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C"; DROP FUNCTION PLUS_TWO(INTEGER) | 1 | 0 DROP TABLE IF EXISTS test | 3 | 0 DROP TABLE test | 1 | 0 + RESET enable_seqscan | 1 | 0 + RESET work_mem | 1 | 0 SELECT $1 | 1 | 1 SELECT pg_stat_statements_reset() | 1 | 1 SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C" | 0 | 0 -(9 rows) + SET enable_seqscan = off | 1 | 0 + SET enable_seqscan = on | 1 | 0 + SET work_mem = '1MB' | 2 | 0 + SET work_mem = '2MB' | 1 | 0 +(15 rows) -- -- Track the total number of rows retrieved or affected by the utility diff --git a/contrib/pg_stat_statements/sql/pg_stat_statements.sql b/contrib/pg_stat_statements/sql/pg_stat_statements.sql index b82cddf16f..cebde7392b 100644 --- a/contrib/pg_stat_statements/sql/pg_stat_statements.sql +++ b/contrib/pg_stat_statements/sql/pg_stat_statements.sql @@ -270,6 +270,14 @@ DROP TABLE IF EXISTS test \; Drop Table If Exists test \; DROP FUNCTION IF EXISTS PLUS_ONE(INTEGER); DROP FUNCTION PLUS_TWO(INTEGER); +-- This SET query uses two different strings, still they count as one entry. +SET work_mem = '1MB'; +Set work_mem = '1MB'; +SET work_mem = '2MB'; +RESET work_mem; +SET enable_seqscan = off; +SET enable_seqscan = on; +RESET enable_seqscan; SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C"; |