From e756ea04739249b3e717f5dd1d0e227de02a4236 Mon Sep 17 00:00:00 2001 From: naisila Date: Wed, 17 Aug 2022 13:24:46 +0300 Subject: [PATCH] Handles EXPLAIN output diffs in PG15: enable_group_by_reordering Relevant PG commit db0d67db2401eb6238ccc04c6407a4fd4f985832 --- src/test/regress/expected/cte_inline.out | 39 ++++++++++++++++++++++++ src/test/regress/sql/cte_inline.sql | 18 +++++++++++ 2 files changed, 57 insertions(+) diff --git a/src/test/regress/expected/cte_inline.out b/src/test/regress/expected/cte_inline.out index 46156ac93..a534a7ac9 100644 --- a/src/test/regress/expected/cte_inline.out +++ b/src/test/regress/expected/cte_inline.out @@ -449,6 +449,29 @@ DEBUG: Creating router plan (5 rows) \set VERBOSITY default +-- enable_group_by_reordering is a new GUC introduced in PG15 +-- it does some optimization of the order of group by keys which results +-- in a different explain output plan between PG13/14 and PG15 +-- Hence we set that GUC to off. +SHOW server_version \gset +SELECT substring(:'server_version', '\d+')::int > 14 AS server_version_above_fourteen +\gset +\if :server_version_above_fourteen +SET enable_group_by_reordering TO off; +\endif +SELECT DISTINCT 1 FROM run_command_on_workers($$ALTER SYSTEM SET enable_group_by_reordering TO off;$$); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +SELECT run_command_on_workers($$SELECT pg_reload_conf()$$); + run_command_on_workers +--------------------------------------------------------------------- + (localhost,57637,t,t) + (localhost,57638,t,t) +(2 rows) + EXPLAIN (COSTS OFF) WITH cte_1 AS NOT MATERIALIZED (SELECT * FROM test_table) SELECT count(*) @@ -487,6 +510,22 @@ DEBUG: join prunable for intervals [1073741824,2147483647] and [0,1073741823] -> Seq Scan on test_table_1960000 test_table_1 (12 rows) +\if :server_version_above_fourteen +RESET enable_group_by_reordering; +\endif +SELECT DISTINCT 1 FROM run_command_on_workers($$ALTER SYSTEM RESET enable_group_by_reordering;$$); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +SELECT run_command_on_workers($$SELECT pg_reload_conf()$$); + run_command_on_workers +--------------------------------------------------------------------- + (localhost,57637,t,t) + (localhost,57638,t,t) +(2 rows) + -- ctes with volatile functions are not -- inlined WITH cte_1 AS (SELECT *, random() FROM test_table) diff --git a/src/test/regress/sql/cte_inline.sql b/src/test/regress/sql/cte_inline.sql index 8c70bc13f..c554d5df9 100644 --- a/src/test/regress/sql/cte_inline.sql +++ b/src/test/regress/sql/cte_inline.sql @@ -236,6 +236,19 @@ $Q$); \set VERBOSITY default +-- enable_group_by_reordering is a new GUC introduced in PG15 +-- it does some optimization of the order of group by keys which results +-- in a different explain output plan between PG13/14 and PG15 +-- Hence we set that GUC to off. +SHOW server_version \gset +SELECT substring(:'server_version', '\d+')::int > 14 AS server_version_above_fourteen +\gset +\if :server_version_above_fourteen +SET enable_group_by_reordering TO off; +\endif +SELECT DISTINCT 1 FROM run_command_on_workers($$ALTER SYSTEM SET enable_group_by_reordering TO off;$$); +SELECT run_command_on_workers($$SELECT pg_reload_conf()$$); + EXPLAIN (COSTS OFF) WITH cte_1 AS NOT MATERIALIZED (SELECT * FROM test_table) SELECT count(*) @@ -245,6 +258,11 @@ FROM cte_1 as second_entry USING (key); +\if :server_version_above_fourteen +RESET enable_group_by_reordering; +\endif +SELECT DISTINCT 1 FROM run_command_on_workers($$ALTER SYSTEM RESET enable_group_by_reordering;$$); +SELECT run_command_on_workers($$SELECT pg_reload_conf()$$); -- ctes with volatile functions are not