mirror of https://github.com/citusdata/citus.git
Enhance regression test for issue 7891 to verify planner's handling of local and reference tables
parent
f96f1fe115
commit
262a9b611e
|
@ -1,3 +1,6 @@
|
||||||
|
-- This construct has been used as a regression test to ensure that the planner
|
||||||
|
-- correctly distinguishes between "local" and "reference" tables, avoiding an erroneous 0-task plan.
|
||||||
|
-- https://github.com/citusdata/citus/issues/7891
|
||||||
CREATE SCHEMA issue_7891;
|
CREATE SCHEMA issue_7891;
|
||||||
SET search_path TO issue_7891;
|
SET search_path TO issue_7891;
|
||||||
|
|
||||||
|
@ -62,61 +65,8 @@ SELECT 't2_ref data' AS label, * FROM t2_ref;
|
||||||
-- Historically might produce a 0-task plan if the planner incorrectly fails to
|
-- Historically might produce a 0-task plan if the planner incorrectly fails to
|
||||||
-- treat t4_pg/t2_ref as local/reference.
|
-- treat t4_pg/t2_ref as local/reference.
|
||||||
--
|
--
|
||||||
--- EXPLAIN of update (problem scenario) ---
|
|
||||||
EXPLAIN (VERBOSE, COSTS OFF)
|
|
||||||
UPDATE t6_pg
|
|
||||||
SET vkey = 43
|
|
||||||
WHERE EXISTS (
|
|
||||||
SELECT (SELECT c15 FROM t2_ref)
|
|
||||||
FROM t4_pg
|
|
||||||
);
|
|
||||||
QUERY PLAN
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
Custom Scan (Citus Adaptive)
|
|
||||||
Task Count: 1
|
|
||||||
Tasks Shown: All
|
|
||||||
-> Task
|
|
||||||
Query: UPDATE issue_7891.t6_pg SET vkey = 43 WHERE (EXISTS (SELECT (SELECT t2_ref.c15 FROM (SELECT NULL::integer AS vkey, NULL::integer AS pkey, NULL::timestamp without time zone AS c15 WHERE false) t2_ref(vkey, pkey, c15)) AS c15 FROM issue_7891.t4_pg))
|
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
|
||||||
-> Update on issue_7891.t6_pg
|
|
||||||
InitPlan 1
|
|
||||||
-> Seq Scan on issue_7891.t4_pg
|
|
||||||
-> Result
|
|
||||||
Output: 43, t6_pg.ctid
|
|
||||||
One-Time Filter: (InitPlan 1).col1
|
|
||||||
-> Seq Scan on issue_7891.t6_pg
|
|
||||||
Output: t6_pg.ctid
|
|
||||||
(14 rows)
|
|
||||||
|
|
||||||
|
-- The outer subquery iterates over every row in table t4_pg.
|
||||||
--- EXPLAIN reversing subquery usage ---
|
|
||||||
EXPLAIN (VERBOSE, COSTS OFF)
|
|
||||||
UPDATE t6_pg
|
|
||||||
SET vkey = 43
|
|
||||||
WHERE EXISTS (
|
|
||||||
SELECT (SELECT c22 FROM t4_pg)
|
|
||||||
FROM t2_ref
|
|
||||||
);
|
|
||||||
QUERY PLAN
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
Custom Scan (Citus Adaptive)
|
|
||||||
Task Count: 1
|
|
||||||
Tasks Shown: All
|
|
||||||
-> Task
|
|
||||||
Query: UPDATE issue_7891.t6_pg SET vkey = 43 WHERE (EXISTS (SELECT (SELECT t4_pg.c22 FROM issue_7891.t4_pg) AS c22 FROM issue_7891.t2_ref_363177 t2_ref))
|
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
|
||||||
-> Update on issue_7891.t6_pg
|
|
||||||
InitPlan 1
|
|
||||||
-> Seq Scan on issue_7891.t2_ref_363177 t2_ref
|
|
||||||
-> Result
|
|
||||||
Output: 43, t6_pg.ctid
|
|
||||||
One-Time Filter: (InitPlan 1).col1
|
|
||||||
-> Seq Scan on issue_7891.t6_pg
|
|
||||||
Output: t6_pg.ctid
|
|
||||||
(14 rows)
|
|
||||||
|
|
||||||
|
|
||||||
-- Now actually do the update to confirm it works
|
|
||||||
UPDATE t6_pg
|
UPDATE t6_pg
|
||||||
SET vkey = 43
|
SET vkey = 43
|
||||||
WHERE EXISTS (
|
WHERE EXISTS (
|
||||||
|
@ -132,9 +82,23 @@ SELECT 't6_pg after' AS label, * FROM t6_pg;
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
|
||||||
|
-- The outer subquery iterates over rows from the reference table t2_ref
|
||||||
|
UPDATE t6_pg
|
||||||
|
SET vkey = 43
|
||||||
|
WHERE EXISTS (
|
||||||
|
SELECT (SELECT c22 FROM t4_pg)
|
||||||
|
FROM t2_ref
|
||||||
|
);
|
||||||
|
ERROR: relation "issue_7891.t6_pg" does not exist
|
||||||
|
CONTEXT: while executing command on localhost:xxxxx
|
||||||
|
|
||||||
|
-- Show final data
|
||||||
|
SELECT 't6_pg after' AS label, * FROM t6_pg;
|
||||||
|
label | vkey | pkey | c26
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
t6_pg after | 43 | 12000 |
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
|
||||||
|
SET client_min_messages TO WARNING;
|
||||||
DROP SCHEMA issue_7891 CASCADE;
|
DROP SCHEMA issue_7891 CASCADE;
|
||||||
NOTICE: drop cascades to 4 other objects
|
|
||||||
DETAIL: drop cascades to table t2_ref
|
|
||||||
drop cascades to table t4_pg
|
|
||||||
drop cascades to table t6_pg
|
|
||||||
drop cascades to table t2_ref_363177
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
-- This construct has been used as a regression test to ensure that the planner
|
||||||
|
-- correctly distinguishes between "local" and "reference" tables, avoiding an erroneous 0-task plan.
|
||||||
|
-- https://github.com/citusdata/citus/issues/7891
|
||||||
CREATE SCHEMA issue_7891;
|
CREATE SCHEMA issue_7891;
|
||||||
SET search_path TO issue_7891;
|
SET search_path TO issue_7891;
|
||||||
|
|
||||||
|
@ -42,25 +45,8 @@ SELECT 't2_ref data' AS label, * FROM t2_ref;
|
||||||
-- Historically might produce a 0-task plan if the planner incorrectly fails to
|
-- Historically might produce a 0-task plan if the planner incorrectly fails to
|
||||||
-- treat t4_pg/t2_ref as local/reference.
|
-- treat t4_pg/t2_ref as local/reference.
|
||||||
--
|
--
|
||||||
--- EXPLAIN of update (problem scenario) ---
|
|
||||||
EXPLAIN (VERBOSE, COSTS OFF)
|
|
||||||
UPDATE t6_pg
|
|
||||||
SET vkey = 43
|
|
||||||
WHERE EXISTS (
|
|
||||||
SELECT (SELECT c15 FROM t2_ref)
|
|
||||||
FROM t4_pg
|
|
||||||
);
|
|
||||||
|
|
||||||
--- EXPLAIN reversing subquery usage ---
|
-- The outer subquery iterates over every row in table t4_pg.
|
||||||
EXPLAIN (VERBOSE, COSTS OFF)
|
|
||||||
UPDATE t6_pg
|
|
||||||
SET vkey = 43
|
|
||||||
WHERE EXISTS (
|
|
||||||
SELECT (SELECT c22 FROM t4_pg)
|
|
||||||
FROM t2_ref
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Now actually do the update to confirm it works
|
|
||||||
UPDATE t6_pg
|
UPDATE t6_pg
|
||||||
SET vkey = 43
|
SET vkey = 43
|
||||||
WHERE EXISTS (
|
WHERE EXISTS (
|
||||||
|
@ -71,4 +57,16 @@ UPDATE t6_pg
|
||||||
-- Show final data
|
-- Show final data
|
||||||
SELECT 't6_pg after' AS label, * FROM t6_pg;
|
SELECT 't6_pg after' AS label, * FROM t6_pg;
|
||||||
|
|
||||||
|
-- The outer subquery iterates over rows from the reference table t2_ref
|
||||||
|
UPDATE t6_pg
|
||||||
|
SET vkey = 43
|
||||||
|
WHERE EXISTS (
|
||||||
|
SELECT (SELECT c22 FROM t4_pg)
|
||||||
|
FROM t2_ref
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Show final data
|
||||||
|
SELECT 't6_pg after' AS label, * FROM t6_pg;
|
||||||
|
|
||||||
|
SET client_min_messages TO WARNING;
|
||||||
DROP SCHEMA issue_7891 CASCADE;
|
DROP SCHEMA issue_7891 CASCADE;
|
||||||
|
|
Loading…
Reference in New Issue