Handles EXPLAIN output diffs in PG15: enable_group_by_reordering

Relevant PG commit
db0d67db2401eb6238ccc04c6407a4fd4f985832
pg_15_iso_fix
naisila 2022-08-17 13:24:46 +03:00
parent e40261a1cd
commit e756ea0473
2 changed files with 57 additions and 0 deletions

View File

@ -449,6 +449,29 @@ DEBUG: Creating router plan
(5 rows) (5 rows)
\set VERBOSITY default \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) EXPLAIN (COSTS OFF) WITH cte_1 AS NOT MATERIALIZED (SELECT * FROM test_table)
SELECT SELECT
count(*) count(*)
@ -487,6 +510,22 @@ DEBUG: join prunable for intervals [1073741824,2147483647] and [0,1073741823]
-> Seq Scan on test_table_1960000 test_table_1 -> Seq Scan on test_table_1960000 test_table_1
(12 rows) (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 -- ctes with volatile functions are not
-- inlined -- inlined
WITH cte_1 AS (SELECT *, random() FROM test_table) WITH cte_1 AS (SELECT *, random() FROM test_table)

View File

@ -236,6 +236,19 @@ $Q$);
\set VERBOSITY default \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) EXPLAIN (COSTS OFF) WITH cte_1 AS NOT MATERIALIZED (SELECT * FROM test_table)
SELECT SELECT
count(*) count(*)
@ -245,6 +258,11 @@ FROM
cte_1 as second_entry cte_1 as second_entry
USING (key); 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 -- ctes with volatile functions are not