diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c
index 967eea44..42d35a18 100644
--- a/src/backend/parser/parse_clause.c
+++ b/src/backend/parser/parse_clause.c
@@ -980,6 +980,7 @@ transformRangeGraphTable(ParseState *pstate, RangeGraphTable *rgt)
 		char	   *colname;
 
 		colexpr = transformExpr(pstate, rt->val, EXPR_KIND_SELECT_TARGET);
+		assign_expr_collations(pstate, colexpr);
 
 		if (rt->name)
 			colname = rt->name;
diff --git a/src/test/regress/expected/graph_table.out b/src/test/regress/expected/graph_table.out
index b579e3df..26ba95e5 100644
--- a/src/test/regress/expected/graph_table.out
+++ b/src/test/regress/expected/graph_table.out
@@ -1022,4 +1022,53 @@ SELECT sname, dname FROM GRAPH_TABLE (g1 MATCH (src)->(dest) WHERE src.vprop1 >
 ERROR:  subqueries within GRAPH_TABLE reference are not supported
 SELECT sname, dname FROM GRAPH_TABLE (g1 MATCH (src)->(dest) WHERE out_degree(src.vname) > (SELECT max(out_degree(nname)) FROM GRAPH_TABLE (g1 MATCH (node) COLUMNS (node.vname AS nname))) COLUMNS(src.vname AS sname, dest.vname AS dname));
 ERROR:  subqueries within GRAPH_TABLE reference are not supported
+-- collation assignment for COLUMNS expressions
+SELECT * FROM GRAPH_TABLE (g1 MATCH (src)->(dest) COLUMNS (upper(src.vname) AS u)) ORDER BY u;
+  u  
+-----
+ V11
+ V11
+ V11
+ V12
+ V13
+ V21
+ V22
+ V23
+ V32
+ V33
+ V33
+(11 rows)
+
+SELECT * FROM GRAPH_TABLE (g1 MATCH (src)->(dest) COLUMNS (src.vname || dest.vname AS combined)) ORDER BY combined;
+ combined 
+----------
+ v11v22
+ v11v31
+ v11v33
+ v12v21
+ v13v23
+ v21v12
+ v22v32
+ v23v13
+ v32v22
+ v33v33
+ v33v33
+(11 rows)
+
+SELECT * FROM GRAPH_TABLE (g1 MATCH (src)->(dest) COLUMNS (replace(src.vname, 'S', 'X') AS replaced)) ORDER BY replaced;
+ replaced 
+----------
+ v11
+ v11
+ v11
+ v12
+ v13
+ v21
+ v22
+ v23
+ v32
+ v33
+ v33
+(11 rows)
+
 -- leave the objects behind for pg_upgrade/pg_dump tests
diff --git a/src/test/regress/sql/graph_table.sql b/src/test/regress/sql/graph_table.sql
index 4ff98817..13ece6d8 100644
--- a/src/test/regress/sql/graph_table.sql
+++ b/src/test/regress/sql/graph_table.sql
@@ -582,4 +582,9 @@ SELECT * FROM customers co WHERE co.customer_id = (SELECT customer_id FROM GRAPH
 SELECT sname, dname FROM GRAPH_TABLE (g1 MATCH (src)->(dest) WHERE src.vprop1 > (SELECT max(v1.vprop1) FROM v1) COLUMNS(src.vname AS sname, dest.vname AS dname));
 SELECT sname, dname FROM GRAPH_TABLE (g1 MATCH (src)->(dest) WHERE out_degree(src.vname) > (SELECT max(out_degree(nname)) FROM GRAPH_TABLE (g1 MATCH (node) COLUMNS (node.vname AS nname))) COLUMNS(src.vname AS sname, dest.vname AS dname));
 
+-- collation assignment for COLUMNS expressions
+SELECT * FROM GRAPH_TABLE (g1 MATCH (src)->(dest) COLUMNS (upper(src.vname) AS u)) ORDER BY u;
+SELECT * FROM GRAPH_TABLE (g1 MATCH (src)->(dest) COLUMNS (src.vname || dest.vname AS combined)) ORDER BY combined;
+SELECT * FROM GRAPH_TABLE (g1 MATCH (src)->(dest) COLUMNS (replace(src.vname, 'S', 'X') AS replaced)) ORDER BY replaced;
+
 -- leave the objects behind for pg_upgrade/pg_dump tests
