summaryrefslogtreecommitdiffstats
path: root/src/backend/parser/parse_merge.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-21 05:05:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-21 05:05:20 +0000
commita14b88819a8a22da4f5abb19a3b1b61aebb10a7c (patch)
tree45f36cde15c9ff8c45d9efbaa7b02426ca984121 /src/backend/parser/parse_merge.c
parentAdding debian version 15.6-0+deb12u1. (diff)
downloadpostgresql-15-a14b88819a8a22da4f5abb19a3b1b61aebb10a7c.tar.xz
postgresql-15-a14b88819a8a22da4f5abb19a3b1b61aebb10a7c.zip
Merging upstream version 15.7.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/backend/parser/parse_merge.c')
-rw-r--r--src/backend/parser/parse_merge.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/backend/parser/parse_merge.c b/src/backend/parser/parse_merge.c
index e8865bf..de4825b 100644
--- a/src/backend/parser/parse_merge.c
+++ b/src/backend/parser/parse_merge.c
@@ -133,7 +133,11 @@ transformMergeStmt(ParseState *pstate, MergeStmt *stmt)
int when_type = (mergeWhenClause->matched ? 0 : 1);
/*
- * Collect action types so we can check target permissions
+ * Collect permissions to check, according to action types. We require
+ * SELECT privileges for DO NOTHING because it'd be irregular to have
+ * a target relation with zero privileges checked, in case DO NOTHING
+ * is the only action. There's no damage from that: any meaningful
+ * MERGE command requires at least some access to the table anyway.
*/
switch (mergeWhenClause->commandType)
{
@@ -147,6 +151,7 @@ transformMergeStmt(ParseState *pstate, MergeStmt *stmt)
targetPerms |= ACL_DELETE;
break;
case CMD_NOTHING:
+ targetPerms |= ACL_SELECT;
break;
default:
elog(ERROR, "unknown action in MERGE WHEN clause");