On 2024-Jul-16, Alvaro Herrera wrote: > Maybe we can disable this test specifically on Cygwin. We could do that > by creating a postgres_fdw_cancel.sql file, with the current output for > all platforms, and a "SELECT version() ~ 'cygwin' AS skip_test" query, > as we do for encoding tests and such.
Something like this. -- Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/
>From dcb8876e16429e8cba9ea226454b0b77e2e00512 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera <alvhe...@alvh.no-ip.org> Date: Tue, 16 Jul 2024 17:18:55 +0200 Subject: [PATCH] Split out the query_cancel test in postgres_fdw so that it can be skipped in Cygwin --- contrib/postgres_fdw/Makefile | 2 +- .../postgres_fdw/expected/postgres_fdw.out | 16 --------------- .../postgres_fdw/expected/query_cancel.out | 20 +++++++++++++++++++ .../postgres_fdw/expected/query_cancel.sql | 17 ++++++++++++++++ .../postgres_fdw/expected/query_cancel_1.out | 3 +++ contrib/postgres_fdw/meson.build | 1 + contrib/postgres_fdw/sql/postgres_fdw.sql | 8 -------- contrib/postgres_fdw/sql/query_cancel.sql | 12 +++++++++++ 8 files changed, 54 insertions(+), 25 deletions(-) create mode 100644 contrib/postgres_fdw/expected/query_cancel.out create mode 100644 contrib/postgres_fdw/expected/query_cancel.sql create mode 100644 contrib/postgres_fdw/expected/query_cancel_1.out create mode 100644 contrib/postgres_fdw/sql/query_cancel.sql diff --git a/contrib/postgres_fdw/Makefile b/contrib/postgres_fdw/Makefile index c1b0cad453..b9fa699305 100644 --- a/contrib/postgres_fdw/Makefile +++ b/contrib/postgres_fdw/Makefile @@ -16,7 +16,7 @@ SHLIB_LINK_INTERNAL = $(libpq) EXTENSION = postgres_fdw DATA = postgres_fdw--1.0.sql postgres_fdw--1.0--1.1.sql -REGRESS = postgres_fdw +REGRESS = postgres_fdw query_cancel ifdef USE_PGXS PG_CONFIG = pg_config diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 0cc77190dc..8852c19b48 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -2760,22 +2760,6 @@ SELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c (10 rows) 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; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Foreign Scan - Output: (count(*)) - Relations: Aggregate on ((((public.ft1) INNER JOIN (public.ft2)) INNER JOIN (public.ft4)) INNER JOIN (public.ft5)) - Remote SQL: SELECT count(*) FROM ((("S 1"."T 1" r1 INNER JOIN "S 1"."T 1" r2 ON (TRUE)) INNER JOIN "S 1"."T 3" r4 ON (TRUE)) INNER JOIN "S 1"."T 4" r6 ON (TRUE)) -(4 rows) - --- Make sure query cancellation works -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 -COMMIT; -- ==================================================================== -- Check that userid to use when querying the remote table is correctly -- propagated into foreign rels present in subqueries under an UNION ALL diff --git a/contrib/postgres_fdw/expected/query_cancel.out b/contrib/postgres_fdw/expected/query_cancel.out new file mode 100644 index 0000000000..afef67aa8d --- /dev/null +++ b/contrib/postgres_fdw/expected/query_cancel.out @@ -0,0 +1,20 @@ +SELECT version() ~ 'cygwin' AS skip_test \gset +\if :skip_test +\quit +\endif +-- 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; + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Foreign Scan + Output: (count(*)) + Relations: Aggregate on ((((public.ft1) INNER JOIN (public.ft2)) INNER JOIN (public.ft4)) INNER JOIN (public.ft5)) + Remote SQL: SELECT count(*) FROM ((("S 1"."T 1" r1 INNER JOIN "S 1"."T 1" r2 ON (TRUE)) INNER JOIN "S 1"."T 3" r4 ON (TRUE)) INNER JOIN "S 1"."T 4" r6 ON (TRUE)) +(4 rows) + +-- Make sure query cancellation works +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 +COMMIT; diff --git a/contrib/postgres_fdw/expected/query_cancel.sql b/contrib/postgres_fdw/expected/query_cancel.sql new file mode 100644 index 0000000000..45a26e06f5 --- /dev/null +++ b/contrib/postgres_fdw/expected/query_cancel.sql @@ -0,0 +1,17 @@ + +-- 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; + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Foreign Scan + Output: (count(*)) + Relations: Aggregate on ((((public.ft1) INNER JOIN (public.ft2)) INNER JOIN (public.ft4)) INNER JOIN (public.ft5)) + Remote SQL: SELECT count(*) FROM ((("S 1"."T 1" r1 INNER JOIN "S 1"."T 1" r2 ON (TRUE)) INNER JOIN "S 1"."T 3" r4 ON (TRUE)) INNER JOIN "S 1"."T 4" r6 ON (TRUE)) +(4 rows) + +-- Make sure query cancellation works +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 +COMMIT; diff --git a/contrib/postgres_fdw/expected/query_cancel_1.out b/contrib/postgres_fdw/expected/query_cancel_1.out new file mode 100644 index 0000000000..c909f2917d --- /dev/null +++ b/contrib/postgres_fdw/expected/query_cancel_1.out @@ -0,0 +1,3 @@ +SELECT version() ~ 'cygwin' AS skip_test \gset +\if :skip_test +\quit diff --git a/contrib/postgres_fdw/meson.build b/contrib/postgres_fdw/meson.build index 2b86d8a6ee..f0803ee077 100644 --- a/contrib/postgres_fdw/meson.build +++ b/contrib/postgres_fdw/meson.build @@ -36,6 +36,7 @@ tests += { 'regress': { 'sql': [ 'postgres_fdw', + 'query_cancel', ], 'regress_args': ['--dlpath', meson.build_root() / 'src/test/regress'], }, diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index b57f8cfda6..1cfb5246ff 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -742,14 +742,6 @@ SELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c SELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 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 -BEGIN; -SET LOCAL statement_timeout = '10ms'; -select count(*) from ft1 CROSS JOIN ft2 CROSS JOIN ft4 CROSS JOIN ft5; -- this takes very long -COMMIT; - -- ==================================================================== -- Check that userid to use when querying the remote table is correctly -- propagated into foreign rels present in subqueries under an UNION ALL diff --git a/contrib/postgres_fdw/sql/query_cancel.sql b/contrib/postgres_fdw/sql/query_cancel.sql new file mode 100644 index 0000000000..11fe077417 --- /dev/null +++ b/contrib/postgres_fdw/sql/query_cancel.sql @@ -0,0 +1,12 @@ +SELECT version() || 'cygwin' ~ 'cygwin' AS skip_test \gset +\if :skip_test +\quit +\endif + +-- 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 +BEGIN; +SET LOCAL statement_timeout = '10ms'; +select count(*) from ft1 CROSS JOIN ft2 CROSS JOIN ft4 CROSS JOIN ft5; -- this takes very long +COMMIT; -- 2.39.2