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;
|
||||
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
|
||||
-- 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)
|
||||
|
||||
|
||||
--- 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
|
||||
-- The outer subquery iterates over every row in table t4_pg.
|
||||
UPDATE t6_pg
|
||||
SET vkey = 43
|
||||
WHERE EXISTS (
|
||||
|
@ -132,9 +82,23 @@ SELECT 't6_pg after' AS label, * FROM t6_pg;
|
|||
(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;
|
||||
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;
|
||||
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
|
||||
-- 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 ---
|
||||
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
|
||||
-- The outer subquery iterates over every row in table t4_pg.
|
||||
UPDATE t6_pg
|
||||
SET vkey = 43
|
||||
WHERE EXISTS (
|
||||
|
@ -71,4 +57,16 @@ UPDATE t6_pg
|
|||
-- Show final data
|
||||
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;
|
||||
|
|
Loading…
Reference in New Issue