diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2022-09-27 10:44:42 +0200 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2022-09-27 10:44:42 +0200 |
commit | 72abf03b6491a8df880e1fea45798797bcc86c47 (patch) | |
tree | 92cd81d3c7ad1ceb657ff69f23811d4634649333 /src/backend | |
parent | d1f95fa2476bcf427a3e3677f67ceee26552e23e (diff) | |
download | postgresql-72abf03b6491a8df880e1fea45798797bcc86c47.tar.gz postgresql-72abf03b6491a8df880e1fea45798797bcc86c47.zip |
Fix pg_stat_statements for MERGE
We weren't jumbling the merge action list, so wildly different commands
would be considered to use the same query ID. Add that, mention it in
the docs, and some test lines.
Backpatch to 15.
Author: Tatsu <bt22nakamorit@oss.nttdata.com>
Reviewed-by: Julien Rouhaud <rjuju123@gmail.com>
Discussion: https://postgr.es/m/d87e391694db75a038abc3b2597828e8@oss.nttdata.com
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/nodes/nodeFuncs.c | 4 | ||||
-rw-r--r-- | src/backend/utils/misc/queryjumble.c | 11 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/backend/nodes/nodeFuncs.c b/src/backend/nodes/nodeFuncs.c index 3bac350bf50..6029da3ee1f 100644 --- a/src/backend/nodes/nodeFuncs.c +++ b/src/backend/nodes/nodeFuncs.c @@ -2266,10 +2266,10 @@ expression_tree_walker(Node *node, { MergeAction *action = (MergeAction *) node; - if (walker(action->targetList, context)) - return true; if (walker(action->qual, context)) return true; + if (walker(action->targetList, context)) + return true; } break; case T_PartitionPruneStepOp: diff --git a/src/backend/utils/misc/queryjumble.c b/src/backend/utils/misc/queryjumble.c index a67487e5fe8..1224bb6c660 100644 --- a/src/backend/utils/misc/queryjumble.c +++ b/src/backend/utils/misc/queryjumble.c @@ -247,6 +247,7 @@ JumbleQueryInternal(JumbleState *jstate, Query *query) JumbleExpr(jstate, (Node *) query->cteList); JumbleRangeTable(jstate, query->rtable); JumbleExpr(jstate, (Node *) query->jointree); + JumbleExpr(jstate, (Node *) query->mergeActionList); JumbleExpr(jstate, (Node *) query->targetList); JumbleExpr(jstate, (Node *) query->onConflict); JumbleExpr(jstate, (Node *) query->returningList); @@ -737,6 +738,16 @@ JumbleExpr(JumbleState *jstate, Node *node) JumbleExpr(jstate, (Node *) conf->exclRelTlist); } break; + case T_MergeAction: + { + MergeAction *mergeaction = (MergeAction *) node; + + APP_JUMB(mergeaction->matched); + APP_JUMB(mergeaction->commandType); + JumbleExpr(jstate, mergeaction->qual); + JumbleExpr(jstate, (Node *) mergeaction->targetList); + } + break; case T_List: foreach(temp, (List *) node) { |