@@ -7595,20 +7595,31 @@ UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END
75957595ALTER SERVER loopback OPTIONS (DROP extensions);
75967596INSERT INTO ft2 (c1,c2,c3)
75977597 SELECT id, id % 10, to_char(id, 'FM00000') FROM generate_series(2001, 2010) id;
7598+ -- this will do a remote seqscan, causing unstable result order, so sort
75987599EXPLAIN (verbose, costs off)
7599- UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING *; -- can't be pushed down
7600- QUERY PLAN
7601- ----------------------------------------------------------------------------------------------------------
7602- Update on public.ft2
7603- Output: c1, c2, c3, c4, c5, c6, c7, c8
7604- Remote SQL: UPDATE "S 1"."T 1" SET c3 = $2 WHERE ctid = $1 RETURNING "C 1", c2, c3, c4, c5, c6, c7, c8
7605- -> Foreign Scan on public.ft2
7606- Output: 'bar'::varchar2(1024), ctid, ft2.*
7607- Filter: (postgres_fdw_abs(ft2.c1) > 2000)
7608- Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8, ctid FROM "S 1"."T 1" FOR UPDATE
7609- (7 rows)
7600+ WITH cte AS (
7601+ UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING *
7602+ ) SELECT * FROM cte ORDER BY c1; -- can't be pushed down
7603+ QUERY PLAN
7604+ ------------------------------------------------------------------------------------------------------------------
7605+ Sort
7606+ Output: cte.c1, cte.c2, cte.c3, cte.c4, cte.c5, cte.c6, cte.c7, cte.c8
7607+ Sort Key: cte.c1
7608+ CTE cte
7609+ -> Update on public.ft2
7610+ Output: ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c7, ft2.c8
7611+ Remote SQL: UPDATE "S 1"."T 1" SET c3 = $2 WHERE ctid = $1 RETURNING "C 1", c2, c3, c4, c5, c6, c7, c8
7612+ -> Foreign Scan on public.ft2
7613+ Output: 'bar'::varchar2(1024), ft2.ctid, ft2.*
7614+ Filter: (postgres_fdw_abs(ft2.c1) > 2000)
7615+ Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8, ctid FROM "S 1"."T 1" FOR UPDATE
7616+ -> CTE Scan on cte
7617+ Output: cte.c1, cte.c2, cte.c3, cte.c4, cte.c5, cte.c6, cte.c7, cte.c8
7618+ (13 rows)
76107619
7611- UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING *;
7620+ WITH cte AS (
7621+ UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING *
7622+ ) SELECT * FROM cte ORDER BY c1;
76127623 c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8
76137624------+----+-----+----+----+----+------------+----
76147625 2001 | 1 | bar | | | | ft2 |
0 commit comments