From 871dabdc631461daa8e425d7523d15737393d04d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Wed, 7 Aug 2019 18:15:51 +0000 Subject: [PATCH] Force CTE materialization in pg12 --- .../expected/limit_intermediate_size.out | 7 +- src/test/regress/expected/multi_explain.out | 87 ++++++++++--------- .../expected/multi_index_statements.out | 8 +- .../expected/multi_index_statements_0.out | 8 +- .../multi_null_minmax_value_pruning.out | 26 +++--- .../multi_null_minmax_value_pruning_0.out | 8 +- .../expected/replicated_partitioned_table.out | 8 +- .../replicated_partitioned_table_0.out | 8 +- src/test/regress/expected/with_dml.out | 5 +- .../regress/sql/limit_intermediate_size.sql | 7 +- src/test/regress/sql/multi_explain.sql | 5 +- .../regress/sql/multi_index_statements.sql | 2 +- .../sql/multi_null_minmax_value_pruning.sql | 2 +- .../sql/replicated_partitioned_table.sql | 2 +- src/test/regress/sql/with_dml.sql | 3 +- 15 files changed, 100 insertions(+), 86 deletions(-) diff --git a/src/test/regress/expected/limit_intermediate_size.out b/src/test/regress/expected/limit_intermediate_size.out index e54fd4c86..8f77b73f4 100644 --- a/src/test/regress/expected/limit_intermediate_size.out +++ b/src/test/regress/expected/limit_intermediate_size.out @@ -89,8 +89,8 @@ UNION ERROR: the intermediate result size exceeds citus.max_intermediate_result_size (currently 0 kB) DETAIL: Citus restricts the size of intermediate results of complex subqueries and CTEs to avoid accidentally pulling large result sets into once place. HINT: To run the current query, set citus.max_intermediate_result_size to a higher value or -1 to disable. --- this should fail since the cte-subplan exceeds the limit even if the --- cte2 and cte3 does not +-- this fails since cte-subplan exceeds limit even if cte2 and cte3 don't +-- WHERE EXISTS forces materialization in pg12 SET citus.max_intermediate_result_size TO 4; WITH cte AS ( WITH cte2 AS ( @@ -100,8 +100,9 @@ WITH cte AS ( SELECT * FROM events_table ) SELECT * FROM cte2, cte3 WHERE cte2.user_id = cte3.user_id AND cte2.user_id = 1 + AND EXISTS (select * from cte2, cte3) ) -SELECT * FROM cte; +SELECT * FROM cte WHERE EXISTS (select * from cte); ERROR: the intermediate result size exceeds citus.max_intermediate_result_size (currently 4 kB) DETAIL: Citus restricts the size of intermediate results of complex subqueries and CTEs to avoid accidentally pulling large result sets into once place. HINT: To run the current query, set citus.max_intermediate_result_size to a higher value or -1 to disable. diff --git a/src/test/regress/expected/multi_explain.out b/src/test/regress/expected/multi_explain.out index a358ea3a5..198ebacfa 100644 --- a/src/test/regress/expected/multi_explain.out +++ b/src/test/regress/expected/multi_explain.out @@ -46,7 +46,7 @@ Sort Sort Key: COALESCE((pg_catalog.sum((COALESCE((pg_catalog.sum(remote_scan.count_quantity))::bigint, '0'::bigint))))::bigint, '0'::bigint), remote_scan.l_quantity -> HashAggregate Group Key: remote_scan.l_quantity - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Task Count: 2 Tasks Shown: One of 2 -> Task @@ -65,7 +65,7 @@ Sort Group Key: remote_scan.l_quantity -> Sort Sort Key: remote_scan.l_quantity - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Task Count: 2 Tasks Shown: One of 2 -> Task @@ -96,7 +96,7 @@ EXPLAIN (COSTS FALSE, FORMAT JSON) { "Node Type": "Custom Scan", "Parent Relationship": "Outer", - "Custom Plan Provider": "Citus Real-Time", + "Custom Plan Provider": "Citus Adaptive", "Parallel Aware": false, "Distributed Query": { "Job": { @@ -171,7 +171,7 @@ EXPLAIN (COSTS FALSE, FORMAT XML) Custom Scan Outer - Citus Real-Time + Citus Adaptive false @@ -241,7 +241,7 @@ EXPLAIN (COSTS FALSE, FORMAT YAML) Plans: - Node Type: "Custom Scan" Parent Relationship: "Outer" - Custom Plan Provider: "Citus Real-Time" + Custom Plan Provider: "Citus Adaptive" Parallel Aware: false Distributed Query: Job: @@ -272,7 +272,7 @@ Sort Sort Key: COALESCE((pg_catalog.sum((COALESCE((pg_catalog.sum(remote_scan.count_quantity))::bigint, '0'::bigint))))::bigint, '0'::bigint), remote_scan.l_quantity -> HashAggregate Group Key: remote_scan.l_quantity - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Task Count: 2 Tasks Shown: One of 2 -> Task @@ -285,7 +285,7 @@ EXPLAIN (COSTS FALSE, VERBOSE TRUE) SELECT sum(l_quantity) / avg(l_quantity) FROM lineitem; Aggregate Output: (sum(remote_scan."?column?") / (sum(remote_scan."?column?_1") / pg_catalog.sum(remote_scan."?column?_2"))) - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Output: remote_scan."?column?", remote_scan."?column?_1", remote_scan."?column?_2" Task Count: 2 Tasks Shown: One of 2 @@ -303,7 +303,7 @@ EXPLAIN (COSTS FALSE) Limit -> Sort Sort Key: remote_scan.l_quantity - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Task Count: 2 Tasks Shown: One of 2 -> Task @@ -320,7 +320,7 @@ Limit -- Test insert EXPLAIN (COSTS FALSE) INSERT INTO lineitem VALUES (1,0), (2, 0), (3, 0), (4, 0); -Custom Scan (Citus Router) +Custom Scan (Citus Adaptive) Task Count: 1 Tasks Shown: All -> Task @@ -332,7 +332,7 @@ EXPLAIN (COSTS FALSE) UPDATE lineitem SET l_suppkey = 12 WHERE l_orderkey = 1 AND l_partkey = 0; -Custom Scan (Citus Router) +Custom Scan (Citus Adaptive) Task Count: 1 Tasks Shown: All -> Task @@ -345,7 +345,7 @@ Custom Scan (Citus Router) EXPLAIN (COSTS FALSE) DELETE FROM lineitem WHERE l_orderkey = 1 AND l_partkey = 0; -Custom Scan (Citus Router) +Custom Scan (Citus Adaptive) Task Count: 1 Tasks Shown: All -> Task @@ -359,20 +359,20 @@ EXPLAIN (COSTS FALSE) UPDATE lineitem SET l_suppkey = 12 WHERE l_orderkey = 1 AND l_orderkey = 0; -Custom Scan (Citus Router) +Custom Scan (Citus Adaptive) Task Count: 0 Tasks Shown: All -- Test zero-shard delete EXPLAIN (COSTS FALSE) DELETE FROM lineitem WHERE l_orderkey = 1 AND l_orderkey = 0; -Custom Scan (Citus Router) +Custom Scan (Citus Adaptive) Task Count: 0 Tasks Shown: All -- Test single-shard SELECT EXPLAIN (COSTS FALSE) SELECT l_quantity FROM lineitem WHERE l_orderkey = 5; -Custom Scan (Citus Router) +Custom Scan (Citus Adaptive) Task Count: 1 Tasks Shown: All -> Task @@ -389,7 +389,7 @@ t EXPLAIN (COSTS FALSE) CREATE TABLE explain_result AS SELECT * FROM lineitem; -Custom Scan (Citus Real-Time) +Custom Scan (Citus Adaptive) Task Count: 2 Tasks Shown: One of 2 -> Task @@ -402,7 +402,7 @@ EXPLAIN (COSTS FALSE, VERBOSE TRUE) Aggregate Output: (sum(remote_scan."?column?") / (sum(remote_scan."?column?_1") / pg_catalog.sum(remote_scan."?column?_2"))) Filter: (sum(remote_scan.worker_column_4) > '100'::numeric) - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Output: remote_scan."?column?", remote_scan."?column?_1", remote_scan."?column?_2", remote_scan.worker_column_4 Task Count: 2 Tasks Shown: One of 2 @@ -421,7 +421,7 @@ HashAggregate Output: remote_scan.l_quantity Group Key: remote_scan.l_quantity Filter: ((remote_scan.worker_column_2)::double precision > ('100'::double precision * random())) - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Output: remote_scan.l_quantity, remote_scan.worker_column_2 Task Count: 2 Tasks Shown: One of 2 @@ -459,7 +459,7 @@ FROM tenant_id, user_id) AS subquery; Aggregate - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Task Count: 4 Tasks Shown: One of 4 -> Task @@ -541,7 +541,7 @@ GROUP BY hasdone; HashAggregate Group Key: remote_scan.hasdone - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Task Count: 4 Tasks Shown: One of 4 -> Task @@ -709,7 +709,7 @@ LIMIT Limit -> Sort Sort Key: remote_scan.user_lastseen DESC - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Task Count: 4 Tasks Shown: One of 4 -> Task @@ -738,7 +738,7 @@ SET citus.explain_all_tasks TO on; EXPLAIN (COSTS FALSE) SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030; Aggregate - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Task Count: 1 Tasks Shown: All -> Task @@ -757,7 +757,7 @@ t EXPLAIN (COSTS FALSE) UPDATE lineitem_hash_part SET l_suppkey = 12; -Custom Scan (Citus Router) +Custom Scan (Citus Adaptive) Task Count: 4 Tasks Shown: All -> Task @@ -781,7 +781,7 @@ EXPLAIN (COSTS FALSE) UPDATE lineitem_hash_part SET l_suppkey = 12 WHERE l_orderkey = 1 OR l_orderkey = 3; -Custom Scan (Citus Router) +Custom Scan (Citus Adaptive) Task Count: 2 Tasks Shown: All -> Task @@ -797,7 +797,7 @@ Custom Scan (Citus Router) -- Test multi shard delete EXPLAIN (COSTS FALSE) DELETE FROM lineitem_hash_part; -Custom Scan (Citus Router) +Custom Scan (Citus Adaptive) Task Count: 4 Tasks Shown: All -> Task @@ -823,7 +823,7 @@ EXPLAIN (COSTS FALSE) SET l_suppkey = 12 FROM orders_hash_part WHERE orders_hash_part.o_orderkey = lineitem_hash_part.l_orderkey; -Custom Scan (Citus Router) +Custom Scan (Citus Adaptive) Task Count: 4 Tasks Shown: One of 4 -> Task @@ -839,7 +839,7 @@ EXPLAIN (COSTS FALSE) DELETE FROM lineitem_hash_part USING orders_hash_part WHERE orders_hash_part.o_orderkey = lineitem_hash_part.l_orderkey; -Custom Scan (Citus Router) +Custom Scan (Citus Adaptive) Task Count: 4 Tasks Shown: One of 4 -> Task @@ -1055,7 +1055,7 @@ Aggregate RESET citus.task_executor_type; PREPARE router_executor_query AS SELECT l_quantity FROM lineitem WHERE l_orderkey = 5; EXPLAIN EXECUTE router_executor_query; -Custom Scan (Citus Router) (cost=0.00..0.00 rows=0 width=0) +Custom Scan (Citus Adaptive) (cost=0.00..0.00 rows=0 width=0) Task Count: 1 Tasks Shown: All -> Task @@ -1066,7 +1066,7 @@ PREPARE real_time_executor_query AS SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030; EXPLAIN (COSTS FALSE) EXECUTE real_time_executor_query; Aggregate - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Task Count: 1 Tasks Shown: All -> Task @@ -1078,7 +1078,7 @@ Aggregate -- at least make sure to fail without crashing PREPARE router_executor_query_param(int) AS SELECT l_quantity FROM lineitem WHERE l_orderkey = $1; EXPLAIN EXECUTE router_executor_query_param(5); -Custom Scan (Citus Router) (cost=0.00..0.00 rows=0 width=0) +Custom Scan (Citus Adaptive) (cost=0.00..0.00 rows=0 width=0) Task Count: 1 Tasks Shown: All -> Task @@ -1098,11 +1098,11 @@ INSERT INTO lineitem_hash_part SELECT o_orderkey FROM orders_hash_part LIMIT 3; Custom Scan (Citus INSERT ... SELECT via coordinator) -> Limit - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Task Count: 4 Tasks Shown: One of 4 -> Task - Node: host=localhost port=57638 dbname=regression + Node: host=localhost port=57637 dbname=regression -> Limit -> Seq Scan on orders_hash_part_360045 orders_hash_part SELECT true AS valid FROM explain_json($$ @@ -1115,11 +1115,11 @@ INSERT INTO lineitem_hash_part (l_orderkey, l_quantity) SELECT o_orderkey, 5 FROM orders_hash_part LIMIT 3; Custom Scan (Citus INSERT ... SELECT via coordinator) -> Limit - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Task Count: 4 Tasks Shown: One of 4 -> Task - Node: host=localhost port=57638 dbname=regression + Node: host=localhost port=57637 dbname=regression -> Limit -> Seq Scan on orders_hash_part_360045 orders_hash_part EXPLAIN (COSTS OFF) @@ -1127,18 +1127,27 @@ INSERT INTO lineitem_hash_part (l_orderkey) SELECT s FROM generate_series(1,5) s; Custom Scan (Citus INSERT ... SELECT via coordinator) -> Function Scan on generate_series s +-- WHERE EXISTS forces pg12 to materialize cte EXPLAIN (COSTS OFF) WITH cte1 AS (SELECT s FROM generate_series(1,10) s) INSERT INTO lineitem_hash_part -WITH cte1 AS (SELECT * FROM cte1 LIMIT 5) -SELECT s FROM cte1; +WITH cte1 AS (SELECT * FROM cte1 WHERE EXISTS (SELECT * FROM cte1) LIMIT 5) +SELECT s FROM cte1 WHERE EXISTS (SELECT * FROM cte1); Custom Scan (Citus INSERT ... SELECT via coordinator) - -> CTE Scan on cte1 + -> Result + One-Time Filter: $3 CTE cte1 -> Function Scan on generate_series s CTE cte1 -> Limit - -> CTE Scan on cte1 cte1_1 + InitPlan 2 (returns $1) + -> CTE Scan on cte1 cte1_1 + -> Result + One-Time Filter: $1 + -> CTE Scan on cte1 cte1_2 + InitPlan 4 (returns $3) + -> CTE Scan on cte1 cte1_3 + -> CTE Scan on cte1 EXPLAIN (COSTS OFF) INSERT INTO lineitem_hash_part ( SELECT s FROM generate_series(1,5) s) UNION @@ -1159,13 +1168,13 @@ series AS ( ) SELECT l_orderkey FROM series JOIN keys ON (s = l_orderkey) ORDER BY s; -Custom Scan (Citus Router) +Custom Scan (Citus Adaptive) Output: remote_scan.l_orderkey -> Distributed Subplan 57_1 -> HashAggregate Output: remote_scan.l_orderkey Group Key: remote_scan.l_orderkey - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Output: remote_scan.l_orderkey Task Count: 4 Tasks Shown: One of 4 diff --git a/src/test/regress/expected/multi_index_statements.out b/src/test/regress/expected/multi_index_statements.out index 4ad80ad4e..0a6ed4614 100644 --- a/src/test/regress/expected/multi_index_statements.out +++ b/src/test/regress/expected/multi_index_statements.out @@ -4,10 +4,10 @@ -- Check that we can run CREATE INDEX and DROP INDEX statements on distributed -- tables. SHOW server_version \gset -SELECT substring(:'server_version', '\d+')::int AS major_version; - major_version ---------------- - 11 +SELECT substring(:'server_version', '\d+')::int > 10 AS server_version_above_ten; + server_version_above_ten +-------------------------- + t (1 row) -- diff --git a/src/test/regress/expected/multi_index_statements_0.out b/src/test/regress/expected/multi_index_statements_0.out index 70eb4e7cf..daa6d71b4 100644 --- a/src/test/regress/expected/multi_index_statements_0.out +++ b/src/test/regress/expected/multi_index_statements_0.out @@ -4,10 +4,10 @@ -- Check that we can run CREATE INDEX and DROP INDEX statements on distributed -- tables. SHOW server_version \gset -SELECT substring(:'server_version', '\d+')::int AS major_version; - major_version ---------------- - 10 +SELECT substring(:'server_version', '\d+')::int > 10 AS server_version_above_ten; + server_version_above_ten +-------------------------- + f (1 row) -- diff --git a/src/test/regress/expected/multi_null_minmax_value_pruning.out b/src/test/regress/expected/multi_null_minmax_value_pruning.out index e40e4893b..fe294b5ae 100644 --- a/src/test/regress/expected/multi_null_minmax_value_pruning.out +++ b/src/test/regress/expected/multi_null_minmax_value_pruning.out @@ -5,10 +5,10 @@ -- and that we don't partition or join prune shards that have null values. -- print major version number for version-specific tests SHOW server_version \gset -SELECT substring(:'server_version', '\d+')::int AS server_version; - server_version ----------------- - 11 +SELECT substring(:'server_version', '\d+')::int > 10 AS server_version_above_ten; + server_version_above_ten +-------------------------- + t (1 row) SET client_min_messages TO DEBUG2; @@ -39,7 +39,7 @@ DEBUG: Router planner does not support append-partitioned tables. LOG: join order: [ "lineitem" ] QUERY PLAN ----------------------------------------------------------------------- - Custom Scan (Citus Real-Time) + Custom Scan (Citus Adaptive) Task Count: 2 Tasks Shown: All -> Task @@ -72,7 +72,7 @@ DEBUG: join prunable for intervals [8997,14947] and [1,5986] QUERY PLAN -------------------------------------------------------------------------------- Aggregate - -> Custom Scan (Citus Real-Time) + -> Custom Scan (Citus Adaptive) Task Count: 2 Tasks Shown: All -> Task @@ -103,7 +103,7 @@ DEBUG: Router planner does not support append-partitioned tables. LOG: join order: [ "lineitem" ] QUERY PLAN ------------------------------------------------------------------------------- - Custom Scan (Citus Real-Time) + Custom Scan (Citus Adaptive) Task Count: 2 Tasks Shown: All -> Task @@ -175,17 +175,17 @@ DEBUG: Router planner does not support append-partitioned tables. LOG: join order: [ "lineitem" ] QUERY PLAN ------------------------------------------------------------------------------- - Custom Scan (Citus Real-Time) + Custom Scan (Citus Adaptive) Task Count: 2 Tasks Shown: All - -> Task - Node: host=localhost port=57638 dbname=regression - -> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem - Index Cond: (l_orderkey = 9030) -> Task Node: host=localhost port=57637 dbname=regression -> Index Scan using lineitem_pkey_290001 on lineitem_290001 lineitem Index Cond: (l_orderkey = 9030) + -> Task + Node: host=localhost port=57638 dbname=regression + -> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem + Index Cond: (l_orderkey = 9030) (11 rows) EXPLAIN (COSTS FALSE) @@ -248,7 +248,7 @@ LOG: join order: [ "lineitem" ] DEBUG: Plan is router executable QUERY PLAN ------------------------------------------------------------------------------- - Custom Scan (Citus Router) + Custom Scan (Citus Adaptive) Task Count: 1 Tasks Shown: All -> Task diff --git a/src/test/regress/expected/multi_null_minmax_value_pruning_0.out b/src/test/regress/expected/multi_null_minmax_value_pruning_0.out index dd1238349..a047dd7c2 100644 --- a/src/test/regress/expected/multi_null_minmax_value_pruning_0.out +++ b/src/test/regress/expected/multi_null_minmax_value_pruning_0.out @@ -5,10 +5,10 @@ -- and that we don't partition or join prune shards that have null values. -- print major version number for version-specific tests SHOW server_version \gset -SELECT substring(:'server_version', '\d+')::int AS server_version; - server_version ----------------- - 10 +SELECT substring(:'server_version', '\d+')::int > 10 AS server_version_above_ten; + server_version_above_ten +-------------------------- + f (1 row) SET client_min_messages TO DEBUG2; diff --git a/src/test/regress/expected/replicated_partitioned_table.out b/src/test/regress/expected/replicated_partitioned_table.out index df990cb02..72ff280a1 100644 --- a/src/test/regress/expected/replicated_partitioned_table.out +++ b/src/test/regress/expected/replicated_partitioned_table.out @@ -8,10 +8,10 @@ SET citus.shard_count TO 4; SET citus.shard_replication_factor TO 2; -- print major version number for version-specific tests SHOW server_version \gset -SELECT substring(:'server_version', '\d+')::int AS server_version; - server_version ----------------- - 11 +SELECT substring(:'server_version', '\d+')::int < 11 AS server_version_is_10; + server_version_is_10 +---------------------- + f (1 row) CREATE TABLE collections ( diff --git a/src/test/regress/expected/replicated_partitioned_table_0.out b/src/test/regress/expected/replicated_partitioned_table_0.out index 015b644a7..08206f63f 100644 --- a/src/test/regress/expected/replicated_partitioned_table_0.out +++ b/src/test/regress/expected/replicated_partitioned_table_0.out @@ -8,10 +8,10 @@ SET citus.shard_count TO 4; SET citus.shard_replication_factor TO 2; -- print major version number for version-specific tests SHOW server_version \gset -SELECT substring(:'server_version', '\d+')::int AS server_version; - server_version ----------------- - 10 +SELECT substring(:'server_version', '\d+')::int < 11 AS server_version_is_10; + server_version_is_10 +---------------------- + t (1 row) CREATE TABLE collections ( diff --git a/src/test/regress/expected/with_dml.out b/src/test/regress/expected/with_dml.out index 45a482f6e..b1d09b315 100644 --- a/src/test/regress/expected/with_dml.out +++ b/src/test/regress/expected/with_dml.out @@ -66,9 +66,10 @@ FROM ids_to_delete, (SELECT tenant_id FROM distributed_table WHERE tenant_id::int < 60) as some_tenants WHERE some_tenants.tenant_id = ids_to_delete.tenant_id - AND distributed_table.tenant_id = some_tenants.tenant_id; + AND distributed_table.tenant_id = some_tenants.tenant_id + AND EXISTS (SELECT * FROM ids_to_delete); DEBUG: generating subplan 12_1 for CTE ids_to_delete: SELECT tenant_id FROM with_dml.distributed_table WHERE (dept OPERATOR(pg_catalog.=) 5) -DEBUG: Plan 12 query after replacing subqueries and CTEs: UPDATE with_dml.distributed_table SET dept = (distributed_table.dept OPERATOR(pg_catalog.+) 1) FROM (SELECT intermediate_result.tenant_id FROM read_intermediate_result('12_1'::text, 'binary'::citus_copy_format) intermediate_result(tenant_id text)) ids_to_delete, (SELECT distributed_table_1.tenant_id FROM with_dml.distributed_table distributed_table_1 WHERE ((distributed_table_1.tenant_id)::integer OPERATOR(pg_catalog.<) 60)) some_tenants WHERE ((some_tenants.tenant_id OPERATOR(pg_catalog.=) ids_to_delete.tenant_id) AND (distributed_table.tenant_id OPERATOR(pg_catalog.=) some_tenants.tenant_id)) +DEBUG: Plan 12 query after replacing subqueries and CTEs: UPDATE with_dml.distributed_table SET dept = (distributed_table.dept OPERATOR(pg_catalog.+) 1) FROM (SELECT intermediate_result.tenant_id FROM read_intermediate_result('12_1'::text, 'binary'::citus_copy_format) intermediate_result(tenant_id text)) ids_to_delete, (SELECT distributed_table_1.tenant_id FROM with_dml.distributed_table distributed_table_1 WHERE ((distributed_table_1.tenant_id)::integer OPERATOR(pg_catalog.<) 60)) some_tenants WHERE ((some_tenants.tenant_id OPERATOR(pg_catalog.=) ids_to_delete.tenant_id) AND (distributed_table.tenant_id OPERATOR(pg_catalog.=) some_tenants.tenant_id) AND (EXISTS (SELECT ids_to_delete_1.tenant_id FROM (SELECT intermediate_result.tenant_id FROM read_intermediate_result('12_1'::text, 'binary'::citus_copy_format) intermediate_result(tenant_id text)) ids_to_delete_1))) -- this query errors out since we've some hard -- errors in the INSERT ... SELECT pushdown -- which prevents to fallback to recursive planning diff --git a/src/test/regress/sql/limit_intermediate_size.sql b/src/test/regress/sql/limit_intermediate_size.sql index 64326847e..4cf8b52ce 100644 --- a/src/test/regress/sql/limit_intermediate_size.sql +++ b/src/test/regress/sql/limit_intermediate_size.sql @@ -84,8 +84,8 @@ UNION )a ORDER BY 1,2,3,4,5 LIMIT 10; --- this should fail since the cte-subplan exceeds the limit even if the --- cte2 and cte3 does not +-- this fails since cte-subplan exceeds limit even if cte2 and cte3 don't +-- WHERE EXISTS forces materialization in pg12 SET citus.max_intermediate_result_size TO 4; WITH cte AS ( WITH cte2 AS ( @@ -95,8 +95,9 @@ WITH cte AS ( SELECT * FROM events_table ) SELECT * FROM cte2, cte3 WHERE cte2.user_id = cte3.user_id AND cte2.user_id = 1 + AND EXISTS (select * from cte2, cte3) ) -SELECT * FROM cte; +SELECT * FROM cte WHERE EXISTS (select * from cte); SET citus.max_intermediate_result_size TO 3; diff --git a/src/test/regress/sql/multi_explain.sql b/src/test/regress/sql/multi_explain.sql index 29123d2a8..12682e9c6 100644 --- a/src/test/regress/sql/multi_explain.sql +++ b/src/test/regress/sql/multi_explain.sql @@ -532,11 +532,12 @@ EXPLAIN (COSTS OFF) INSERT INTO lineitem_hash_part (l_orderkey) SELECT s FROM generate_series(1,5) s; +-- WHERE EXISTS forces pg12 to materialize cte EXPLAIN (COSTS OFF) WITH cte1 AS (SELECT s FROM generate_series(1,10) s) INSERT INTO lineitem_hash_part -WITH cte1 AS (SELECT * FROM cte1 LIMIT 5) -SELECT s FROM cte1; +WITH cte1 AS (SELECT * FROM cte1 WHERE EXISTS (SELECT * FROM cte1) LIMIT 5) +SELECT s FROM cte1 WHERE EXISTS (SELECT * FROM cte1); EXPLAIN (COSTS OFF) INSERT INTO lineitem_hash_part diff --git a/src/test/regress/sql/multi_index_statements.sql b/src/test/regress/sql/multi_index_statements.sql index 89fb7bc54..148f7e860 100644 --- a/src/test/regress/sql/multi_index_statements.sql +++ b/src/test/regress/sql/multi_index_statements.sql @@ -6,7 +6,7 @@ -- tables. SHOW server_version \gset -SELECT substring(:'server_version', '\d+')::int AS major_version; +SELECT substring(:'server_version', '\d+')::int > 10 AS server_version_above_ten; -- -- CREATE TEST TABLES diff --git a/src/test/regress/sql/multi_null_minmax_value_pruning.sql b/src/test/regress/sql/multi_null_minmax_value_pruning.sql index 3a1c0694a..89fc26731 100644 --- a/src/test/regress/sql/multi_null_minmax_value_pruning.sql +++ b/src/test/regress/sql/multi_null_minmax_value_pruning.sql @@ -8,7 +8,7 @@ -- print major version number for version-specific tests SHOW server_version \gset -SELECT substring(:'server_version', '\d+')::int AS server_version; +SELECT substring(:'server_version', '\d+')::int > 10 AS server_version_above_ten; SET client_min_messages TO DEBUG2; SET citus.explain_all_tasks TO on; diff --git a/src/test/regress/sql/replicated_partitioned_table.sql b/src/test/regress/sql/replicated_partitioned_table.sql index eba4b8d35..44c787adf 100644 --- a/src/test/regress/sql/replicated_partitioned_table.sql +++ b/src/test/regress/sql/replicated_partitioned_table.sql @@ -11,7 +11,7 @@ SET citus.shard_replication_factor TO 2; -- print major version number for version-specific tests SHOW server_version \gset -SELECT substring(:'server_version', '\d+')::int AS server_version; +SELECT substring(:'server_version', '\d+')::int < 11 AS server_version_is_10; CREATE TABLE collections ( diff --git a/src/test/regress/sql/with_dml.sql b/src/test/regress/sql/with_dml.sql index db1f42324..7b8a235b7 100644 --- a/src/test/regress/sql/with_dml.sql +++ b/src/test/regress/sql/with_dml.sql @@ -53,7 +53,8 @@ FROM ids_to_delete, (SELECT tenant_id FROM distributed_table WHERE tenant_id::int < 60) as some_tenants WHERE some_tenants.tenant_id = ids_to_delete.tenant_id - AND distributed_table.tenant_id = some_tenants.tenant_id; + AND distributed_table.tenant_id = some_tenants.tenant_id + AND EXISTS (SELECT * FROM ids_to_delete); -- this query errors out since we've some hard -- errors in the INSERT ... SELECT pushdown