mirror of
https://github.com/postgres/postgres.git
synced 2025-04-20 00:42:27 +03:00
Stabilize postgres_fdw tests on 32-bit machines
cac169d68 adjusted DEFAULT_FDW_TUPLE_COST and that seems to have caused a test to become unstable on 32-bit machines. 4b14e1871 tried to fix this as originally the plan was flipping between a Nested Loop and Hash Join. That commit forced the Nested Loop, but there's still flexibility to push or not push the sort to the remote server and 32-bit seems to prefer to push and on 64-bit, the costs prefer not to. Here let's just turn off enable_sort to significantly encourage the sort to take place on the remote server. Reported-by: Michael Paquier, Richard Guo Discussion: https://postgr.es/m/ZUM2IhA8X2lrG50K@paquier.xyz
This commit is contained in:
parent
0bc726d95a
commit
b690e5facb
@ -4019,27 +4019,25 @@ EXECUTE st1(101, 101);
|
|||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SET enable_hashjoin TO off;
|
SET enable_hashjoin TO off;
|
||||||
|
SET enable_sort TO off;
|
||||||
-- subquery using stable function (can't be sent to remote)
|
-- subquery using stable function (can't be sent to remote)
|
||||||
PREPARE st2(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c4) = '1970-01-17'::date) ORDER BY c1;
|
PREPARE st2(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c4) = '1970-01-17'::date) ORDER BY c1;
|
||||||
EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st2(10, 20);
|
EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st2(10, 20);
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
----------------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------------------------------------
|
||||||
Sort
|
Nested Loop Semi Join
|
||||||
Output: t1.c1, t1.c2, t1.c3, t1.c4, t1.c5, t1.c6, t1.c7, t1.c8
|
Output: t1.c1, t1.c2, t1.c3, t1.c4, t1.c5, t1.c6, t1.c7, t1.c8
|
||||||
Sort Key: t1.c1
|
Join Filter: (t2.c3 = t1.c3)
|
||||||
-> Nested Loop Semi Join
|
-> Foreign Scan on public.ft1 t1
|
||||||
Output: t1.c1, t1.c2, t1.c3, t1.c4, t1.c5, t1.c6, t1.c7, t1.c8
|
Output: t1.c1, t1.c2, t1.c3, t1.c4, t1.c5, t1.c6, t1.c7, t1.c8
|
||||||
Join Filter: (t2.c3 = t1.c3)
|
Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" < 20)) ORDER BY "C 1" ASC NULLS LAST
|
||||||
-> Foreign Scan on public.ft1 t1
|
-> Materialize
|
||||||
Output: t1.c1, t1.c2, t1.c3, t1.c4, t1.c5, t1.c6, t1.c7, t1.c8
|
Output: t2.c3
|
||||||
Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" < 20))
|
-> Foreign Scan on public.ft2 t2
|
||||||
-> Materialize
|
|
||||||
Output: t2.c3
|
Output: t2.c3
|
||||||
-> Foreign Scan on public.ft2 t2
|
Filter: (date(t2.c4) = '01-17-1970'::date)
|
||||||
Output: t2.c3
|
Remote SQL: SELECT c3, c4 FROM "S 1"."T 1" WHERE (("C 1" > 10))
|
||||||
Filter: (date(t2.c4) = '01-17-1970'::date)
|
(12 rows)
|
||||||
Remote SQL: SELECT c3, c4 FROM "S 1"."T 1" WHERE (("C 1" > 10))
|
|
||||||
(15 rows)
|
|
||||||
|
|
||||||
EXECUTE st2(10, 20);
|
EXECUTE st2(10, 20);
|
||||||
c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8
|
c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8
|
||||||
@ -4054,6 +4052,7 @@ EXECUTE st2(101, 121);
|
|||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
RESET enable_hashjoin;
|
RESET enable_hashjoin;
|
||||||
|
RESET enable_sort;
|
||||||
-- subquery using immutable function (can be sent to remote)
|
-- subquery using immutable function (can be sent to remote)
|
||||||
PREPARE st3(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c5) = '1970-01-17'::date) ORDER BY c1;
|
PREPARE st3(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c5) = '1970-01-17'::date) ORDER BY c1;
|
||||||
EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st3(10, 20);
|
EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st3(10, 20);
|
||||||
|
@ -1123,12 +1123,14 @@ EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st1(1, 2);
|
|||||||
EXECUTE st1(1, 1);
|
EXECUTE st1(1, 1);
|
||||||
EXECUTE st1(101, 101);
|
EXECUTE st1(101, 101);
|
||||||
SET enable_hashjoin TO off;
|
SET enable_hashjoin TO off;
|
||||||
|
SET enable_sort TO off;
|
||||||
-- subquery using stable function (can't be sent to remote)
|
-- subquery using stable function (can't be sent to remote)
|
||||||
PREPARE st2(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c4) = '1970-01-17'::date) ORDER BY c1;
|
PREPARE st2(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c4) = '1970-01-17'::date) ORDER BY c1;
|
||||||
EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st2(10, 20);
|
EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st2(10, 20);
|
||||||
EXECUTE st2(10, 20);
|
EXECUTE st2(10, 20);
|
||||||
EXECUTE st2(101, 121);
|
EXECUTE st2(101, 121);
|
||||||
RESET enable_hashjoin;
|
RESET enable_hashjoin;
|
||||||
|
RESET enable_sort;
|
||||||
-- subquery using immutable function (can be sent to remote)
|
-- subquery using immutable function (can be sent to remote)
|
||||||
PREPARE st3(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c5) = '1970-01-17'::date) ORDER BY c1;
|
PREPARE st3(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c5) = '1970-01-17'::date) ORDER BY c1;
|
||||||
EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st3(10, 20);
|
EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st3(10, 20);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user