From fa2c5879372d4cced150a6fbd97d25667d04d017 Mon Sep 17 00:00:00 2001 From: Ilya Staroverov Date: Mon, 26 Oct 2026 13:16:22 +0300 Subject: [PATCH v1 11/11] Include OVERRIDING in query jumbling Query.override has not been part of the query ID since OVERRIDING was added in 10, and MergeAction.override was left out when MERGE was added to query jumbling in 15, as OVERRIDING was not thought to matter when the column list is part of the query ID. But with OVERRIDING USER VALUE, the values given for an identity column are ignored, so INSERT ... OVERRIDING USER VALUE VALUES (...) inserts other values than the same INSERT without it, and both were merged into a single pg_stat_statements entry, as was OVERRIDING SYSTEM VALUE. Include both fields in query jumbling. As Query.override is set for all queries, this changes all query IDs, so it is for master only. Author: Ilya Staroverov --- contrib/pg_stat_statements/expected/dml.out | 16 +++++++++++----- src/include/nodes/parsenodes.h | 2 +- src/include/nodes/primnodes.h | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/contrib/pg_stat_statements/expected/dml.out b/contrib/pg_stat_statements/expected/dml.out index ae33c48e97..36507b14b5 100644 --- a/contrib/pg_stat_statements/expected/dml.out +++ b/contrib/pg_stat_statements/expected/dml.out @@ -170,14 +170,20 @@ SELECT a, b FROM pgss_identity_tab ORDER BY a; DROP TABLE pgss_identity_tab; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - calls | rows | query --------+------+------------------------------------------------------------- - 3 | 3 | INSERT INTO pgss_identity_tab VALUES ($1, $2) - 3 | 3 | MERGE INTO pgss_identity_tab USING (SELECT $1 AS b) s ON $2+ + calls | rows | query +-------+------+------------------------------------------------------------------------ + 1 | 1 | INSERT INTO pgss_identity_tab OVERRIDING SYSTEM VALUE VALUES ($1, $2) + 1 | 1 | INSERT INTO pgss_identity_tab OVERRIDING USER VALUE VALUES ($1, $2) + 1 | 1 | INSERT INTO pgss_identity_tab VALUES ($1, $2) + 1 | 1 | MERGE INTO pgss_identity_tab USING (SELECT $1 AS b) s ON $2 + + | | WHEN NOT MATCHED THEN INSERT OVERRIDING SYSTEM VALUE VALUES ($3, s.b) + 1 | 1 | MERGE INTO pgss_identity_tab USING (SELECT $1 AS b) s ON $2 + + | | WHEN NOT MATCHED THEN INSERT OVERRIDING USER VALUE VALUES ($3, s.b) + 1 | 1 | MERGE INTO pgss_identity_tab USING (SELECT $1 AS b) s ON $2 + | | WHEN NOT MATCHED THEN INSERT VALUES ($3, s.b) 1 | 6 | SELECT a, b FROM pgss_identity_tab ORDER BY a 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(4 rows) +(8 rows) -- assignments to fields of a composite column CREATE TYPE pgss_point AS (x int, y int); diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index d753cd2388..473d5d34f4 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -200,7 +200,7 @@ typedef struct Query List *targetList; /* target list (of TargetEntry) */ /* OVERRIDING clause */ - OverridingKind override pg_node_attr(query_jumble_ignore); + OverridingKind override; OnConflictExpr *onConflict; /* ON CONFLICT DO NOTHING/SELECT/UPDATE */ diff --git a/src/include/nodes/primnodes.h b/src/include/nodes/primnodes.h index 4aaf51be56..6f56f9a4a6 100644 --- a/src/include/nodes/primnodes.h +++ b/src/include/nodes/primnodes.h @@ -2042,7 +2042,7 @@ typedef struct MergeAction MergeMatchKind matchKind; /* MATCHED/NOT MATCHED BY SOURCE/TARGET */ CmdType commandType; /* INSERT/UPDATE/DELETE/DO NOTHING */ /* OVERRIDING clause */ - OverridingKind override pg_node_attr(query_jumble_ignore); + OverridingKind override; Node *qual; /* transformed WHEN conditions */ List *targetList; /* the target list (of TargetEntry) */ /* target attribute numbers of an UPDATE */ -- 2.43.0