Stabilize postgres_fdw test
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Sat, 30 Mar 2024 13:16:54 +0000 (14:16 +0100)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Sat, 30 Mar 2024 13:16:54 +0000 (14:16 +0100)
The test fails when RESET statement_timeout takes longer than 10ms.
Avoid the problem by using SET LOCAL instead.

Overall, this test is not ideal: 10ms could be shorter than the time to
have sent the query to the "remote" server, so it's possible that on
some machines this test doesn't actually witness a remote query being
cancelled.  We may want to improve on this someday by using some other
testing technique, but for now it's better than nothing.  I verified
manually that one round of remote cancellation occurs when this runs on
my machine.

Discussion: https://postgr.es/m/CAGECzQRsdWnj=YaaPCnA8d7E1AdbxRPBYmyBQRMPUijR2MpM_w@mail.gmail.com

contrib/postgres_fdw/expected/postgres_fdw.out
contrib/postgres_fdw/sql/postgres_fdw.sql

index b7af86d3511c6d898a2ad74921c3809dd85906ef..078b8a966f852520cfb6c20006e4b3c6f2ffa444 100644 (file)
@@ -2750,10 +2750,11 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 CROSS JOIN ft2 CROSS JOIN
 (4 rows)
 
 -- Make sure query cancellation works
-SET statement_timeout = '10ms';
+BEGIN;
+SET LOCAL statement_timeout = '10ms';
 select count(*) from ft1 CROSS JOIN ft2 CROSS JOIN ft4 CROSS JOIN ft5; -- this takes very long
 ERROR:  canceling statement due to statement timeout
-RESET statement_timeout;
+COMMIT;
 -- ====================================================================
 -- Check that userid to use when querying the remote table is correctly
 -- propagated into foreign rels present in subqueries under an UNION ALL
index 6e1c819159c917c25842ce67ab6ad1626cf447b6..09ba234e43d3ecb16dd5d3e7b62212db54461039 100644 (file)
@@ -740,9 +740,10 @@ ALTER VIEW v4 OWNER TO regress_view_owner;
 -- Make sure this big CROSS JOIN query is pushed down
 EXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 CROSS JOIN ft2 CROSS JOIN ft4 CROSS JOIN ft5;
 -- Make sure query cancellation works
-SET statement_timeout = '10ms';
+BEGIN;
+SET LOCAL statement_timeout = '10ms';
 select count(*) from ft1 CROSS JOIN ft2 CROSS JOIN ft4 CROSS JOIN ft5; -- this takes very long
-RESET statement_timeout;
+COMMIT;
 
 -- ====================================================================
 -- Check that userid to use when querying the remote table is correctly