From 8c1f606de02ff7aa8799046abc067949b76d4046 Mon Sep 17 00:00:00 2001
From: Maksim Milyutin <milyutinma@gmail.com>
Date: Fri, 11 Apr 2025 15:43:42 +0300
Subject: [PATCH v1 1/2] Simplify COALESCE with single argument

---
 src/backend/optimizer/util/clauses.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c
index 26a3e050086..c15a3a41cb6 100644
--- a/src/backend/optimizer/util/clauses.c
+++ b/src/backend/optimizer/util/clauses.c
@@ -3333,6 +3333,13 @@ eval_const_expressions_mutator(Node *node,
 												  -1,
 												  coalesceexpr->coalescecollid);
 
+				/*
+				 * COALESCE with single valued argument looks like identity
+				 * function so that it's converged to its single argument
+				 */
+				if (list_length(newargs) == 1)
+					return (Node *) linitial(newargs);
+
 				newcoalesce = makeNode(CoalesceExpr);
 				newcoalesce->coalescetype = coalesceexpr->coalescetype;
 				newcoalesce->coalescecollid = coalesceexpr->coalescecollid;
-- 
2.43.0

