diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out
index 9e52e09a8b..04517aefee 100644
--- a/contrib/postgres_fdw/expected/postgres_fdw.out
+++ b/contrib/postgres_fdw/expected/postgres_fdw.out
@@ -10070,9 +10070,9 @@ ALTER SERVER loopback OPTIONS (DROP batch_size);
 ALTER SERVER loopback OPTIONS (DROP extensions);
 ALTER SERVER loopback OPTIONS (ADD async_capable 'true');
 ALTER SERVER loopback2 OPTIONS (ADD async_capable 'true');
-CREATE TABLE async_pt (a int, b int, c text) PARTITION BY RANGE (a);
-CREATE TABLE base_tbl1 (a int, b int, c text);
-CREATE TABLE base_tbl2 (a int, b int, c text);
+CREATE TABLE async_pt (a int, b int, c text COLLATE "C") PARTITION BY RANGE (a);
+CREATE TABLE base_tbl1 (a int, b int, c text COLLATE "C");
+CREATE TABLE base_tbl2 (a int, b int, c text COLLATE "C");
 CREATE FOREIGN TABLE async_p1 PARTITION OF async_pt FOR VALUES FROM (1000) TO (2000)
   SERVER loopback OPTIONS (table_name 'base_tbl1');
 CREATE FOREIGN TABLE async_p2 PARTITION OF async_pt FOR VALUES FROM (2000) TO (3000)
@@ -10149,7 +10149,7 @@ SELECT * FROM result_tbl ORDER BY a;
 
 DELETE FROM result_tbl;
 -- Check case where multiple partitions use the same connection
-CREATE TABLE base_tbl3 (a int, b int, c text);
+CREATE TABLE base_tbl3 (a int, b int, c text COLLATE "C");
 CREATE FOREIGN TABLE async_p3 PARTITION OF async_pt FOR VALUES FROM (3000) TO (4000)
   SERVER loopback2 OPTIONS (table_name 'base_tbl3');
 INSERT INTO async_p3 SELECT 3000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;
@@ -10592,8 +10592,8 @@ SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;
 (1 row)
 
 -- Check with foreign modify
-CREATE TABLE base_tbl3 (a int, b int, c text);
-CREATE FOREIGN TABLE remote_tbl (a int, b int, c text)
+CREATE TABLE base_tbl3 (a int, b int, c text COLLATE "C");
+CREATE FOREIGN TABLE remote_tbl (a int, b int, c text COLLATE "C")
   SERVER loopback OPTIONS (table_name 'base_tbl3');
 INSERT INTO remote_tbl VALUES (2505, 505, 'bar');
 CREATE TABLE base_tbl4 (a int, b int, c text);
@@ -10626,16 +10626,14 @@ SELECT * FROM insert_tbl ORDER BY a;
 EXPLAIN (VERBOSE, COSTS OFF)
 WITH t AS (UPDATE remote_tbl SET c = c || c RETURNING *)
 INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND async_pt.b = t.b) WHERE async_pt.b === 505;
-                                         QUERY PLAN                                         
---------------------------------------------------------------------------------------------
+                                       QUERY PLAN                                       
+----------------------------------------------------------------------------------------
  Insert on public.join_tbl
    CTE t
      ->  Update on public.remote_tbl
            Output: remote_tbl.a, remote_tbl.b, remote_tbl.c
-           Remote SQL: UPDATE public.base_tbl3 SET c = $2 WHERE ctid = $1 RETURNING a, b, c
-           ->  Foreign Scan on public.remote_tbl
-                 Output: (remote_tbl.c || remote_tbl.c), remote_tbl.ctid, remote_tbl.*
-                 Remote SQL: SELECT a, b, c, ctid FROM public.base_tbl3 FOR UPDATE
+           ->  Foreign Update on public.remote_tbl
+                 Remote SQL: UPDATE public.base_tbl3 SET c = (c || c) RETURNING a, b, c
    ->  Nested Loop Left Join
          Output: async_pt.a, async_pt.b, async_pt.c, t.a, t.b, t.c
          Join Filter: ((async_pt.a = t.a) AND (async_pt.b = t.b))
@@ -10653,7 +10651,7 @@ INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND
                      Filter: (async_pt_3.b === 505)
          ->  CTE Scan on t
                Output: t.a, t.b, t.c
-(25 rows)
+(23 rows)
 
 WITH t AS (UPDATE remote_tbl SET c = c || c RETURNING *)
 INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND async_pt.b = t.b) WHERE async_pt.b === 505;
@@ -10681,21 +10679,17 @@ UPDATE async_pt SET c = c || c WHERE b = 0 RETURNING *;
  Update on public.async_pt
    Output: async_pt_1.a, async_pt_1.b, async_pt_1.c
    Foreign Update on public.async_p1 async_pt_1
-     Remote SQL: UPDATE public.base_tbl1 SET c = $2 WHERE ctid = $1 RETURNING a, b, c
    Foreign Update on public.async_p2 async_pt_2
-     Remote SQL: UPDATE public.base_tbl2 SET c = $2 WHERE ctid = $1 RETURNING a, b, c
    Update on public.async_p3 async_pt_3
    ->  Append
-         ->  Foreign Scan on public.async_p1 async_pt_1
-               Output: (async_pt_1.c || async_pt_1.c), async_pt_1.tableoid, async_pt_1.ctid, async_pt_1.*
-               Remote SQL: SELECT a, b, c, ctid FROM public.base_tbl1 WHERE ((b = 0)) FOR UPDATE
-         ->  Foreign Scan on public.async_p2 async_pt_2
-               Output: (async_pt_2.c || async_pt_2.c), async_pt_2.tableoid, async_pt_2.ctid, async_pt_2.*
-               Remote SQL: SELECT a, b, c, ctid FROM public.base_tbl2 WHERE ((b = 0)) FOR UPDATE
+         ->  Foreign Update on public.async_p1 async_pt_1
+               Remote SQL: UPDATE public.base_tbl1 SET c = (c || c) WHERE ((b = 0)) RETURNING a, b, c
+         ->  Foreign Update on public.async_p2 async_pt_2
+               Remote SQL: UPDATE public.base_tbl2 SET c = (c || c) WHERE ((b = 0)) RETURNING a, b, c
          ->  Seq Scan on public.async_p3 async_pt_3
                Output: (async_pt_3.c || async_pt_3.c), async_pt_3.tableoid, async_pt_3.ctid, NULL::record
                Filter: (async_pt_3.b = 0)
-(17 rows)
+(13 rows)
 
 UPDATE async_pt SET c = c || c WHERE b = 0 RETURNING *;
   a   | b |    c     
diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql
index a96898ed6b..ebffacc64c 100644
--- a/contrib/postgres_fdw/sql/postgres_fdw.sql
+++ b/contrib/postgres_fdw/sql/postgres_fdw.sql
@@ -3184,9 +3184,9 @@ ALTER SERVER loopback OPTIONS (DROP extensions);
 ALTER SERVER loopback OPTIONS (ADD async_capable 'true');
 ALTER SERVER loopback2 OPTIONS (ADD async_capable 'true');
 
-CREATE TABLE async_pt (a int, b int, c text) PARTITION BY RANGE (a);
-CREATE TABLE base_tbl1 (a int, b int, c text);
-CREATE TABLE base_tbl2 (a int, b int, c text);
+CREATE TABLE async_pt (a int, b int, c text COLLATE "C") PARTITION BY RANGE (a);
+CREATE TABLE base_tbl1 (a int, b int, c text COLLATE "C");
+CREATE TABLE base_tbl2 (a int, b int, c text COLLATE "C");
 CREATE FOREIGN TABLE async_p1 PARTITION OF async_pt FOR VALUES FROM (1000) TO (2000)
   SERVER loopback OPTIONS (table_name 'base_tbl1');
 CREATE FOREIGN TABLE async_p2 PARTITION OF async_pt FOR VALUES FROM (2000) TO (3000)
@@ -3213,7 +3213,7 @@ SELECT * FROM result_tbl ORDER BY a;
 DELETE FROM result_tbl;
 
 -- Check case where multiple partitions use the same connection
-CREATE TABLE base_tbl3 (a int, b int, c text);
+CREATE TABLE base_tbl3 (a int, b int, c text COLLATE "C");
 CREATE FOREIGN TABLE async_p3 PARTITION OF async_pt FOR VALUES FROM (3000) TO (4000)
   SERVER loopback2 OPTIONS (table_name 'base_tbl3');
 INSERT INTO async_p3 SELECT 3000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;
@@ -3349,8 +3349,8 @@ SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;
 SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;
 
 -- Check with foreign modify
-CREATE TABLE base_tbl3 (a int, b int, c text);
-CREATE FOREIGN TABLE remote_tbl (a int, b int, c text)
+CREATE TABLE base_tbl3 (a int, b int, c text COLLATE "C");
+CREATE FOREIGN TABLE remote_tbl (a int, b int, c text COLLATE "C")
   SERVER loopback OPTIONS (table_name 'base_tbl3');
 INSERT INTO remote_tbl VALUES (2505, 505, 'bar');
 
