On 2013-08-30 19:28:39 -0400, Tom Lane wrote: > Andres Freund <and...@2ndquadrant.com> writes: > > On 2013-08-30 18:55:53 -0400, Tom Lane wrote: > >> Not sure. It's pretty disturbing that this wasn't caught earlier; > >> it seems to me that means there's no regression coverage that hits > >> ExecReScanMergeAppend. However, I don't much like this specific test case > >> because it seems like hitting the bug could depend on what series of > >> random values you get. > > > Hm, that should be fixable. How about: > > Looks good, applied.
On second thought, it might not be so good looking - the queries results are independent of the data from merge-append. So we only check that we don't crash and not that the results make any sense. How about the attached patch? I verified that it fails without the binaryheap_reset(). Greetings, Andres Freund -- Andres Freund http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
>From 14f521d9e2e9efde8b19a1664b2cf2056a2e9520 Mon Sep 17 00:00:00 2001 From: Andres Freund <and...@anarazel.de> Date: Sat, 31 Aug 2013 01:54:05 +0200 Subject: [PATCH] Improve regression test for #8410 The previous version of the query disregarded the result of the MergeAppend instead of checking its results. --- src/test/regress/expected/inherit.out | 49 +++++++++++++++++------------------ src/test/regress/sql/inherit.sql | 16 ++++++------ 2 files changed, 32 insertions(+), 33 deletions(-) diff --git a/src/test/regress/expected/inherit.out b/src/test/regress/expected/inherit.out index 8520281..a2ef7ef 100644 --- a/src/test/regress/expected/inherit.out +++ b/src/test/regress/expected/inherit.out @@ -1353,42 +1353,41 @@ ORDER BY x, y; -- exercise rescan code path via a repeatedly-evaluated subquery explain (costs off) SELECT - (SELECT g.i FROM ( - (SELECT * FROM generate_series(1, 2) ORDER BY 1) + ARRAY(SELECT f.i FROM ( + (SELECT d + g.i FROM generate_series(4, 30, 3) d ORDER BY 1) UNION ALL - (SELECT * FROM generate_series(1, 2) ORDER BY 1) + (SELECT d + g.i FROM generate_series(0, 30, 5) d ORDER BY 1) ) f(i) - ORDER BY f.i LIMIT 1) + ORDER BY f.i LIMIT 10) FROM generate_series(1, 3) g(i); - QUERY PLAN ------------------------------------------------------------------------------------- + QUERY PLAN +---------------------------------------------------------------- Function Scan on generate_series g SubPlan 1 -> Limit - -> Result - -> Merge Append - Sort Key: generate_series.generate_series - -> Sort - Sort Key: generate_series.generate_series - -> Function Scan on generate_series - -> Sort - Sort Key: generate_series_1.generate_series - -> Function Scan on generate_series generate_series_1 -(12 rows) + -> Merge Append + Sort Key: ((d.d + g.i)) + -> Sort + Sort Key: ((d.d + g.i)) + -> Function Scan on generate_series d + -> Sort + Sort Key: ((d_1.d + g.i)) + -> Function Scan on generate_series d_1 +(11 rows) SELECT - (SELECT g.i FROM ( - (SELECT * FROM generate_series(1, 2) ORDER BY 1) + ARRAY(SELECT f.i FROM ( + (SELECT d + g.i FROM generate_series(4, 30, 3) d ORDER BY 1) UNION ALL - (SELECT * FROM generate_series(1, 2) ORDER BY 1) + (SELECT d + g.i FROM generate_series(0, 30, 5) d ORDER BY 1) ) f(i) - ORDER BY f.i LIMIT 1) + ORDER BY f.i LIMIT 10) FROM generate_series(1, 3) g(i); - i ---- - 1 - 2 - 3 + array +------------------------------ + {1,5,6,8,11,11,14,16,17,20} + {2,6,7,9,12,12,15,17,18,21} + {3,7,8,10,13,13,16,18,19,22} (3 rows) reset enable_seqscan; diff --git a/src/test/regress/sql/inherit.sql b/src/test/regress/sql/inherit.sql index e88a584..8637655 100644 --- a/src/test/regress/sql/inherit.sql +++ b/src/test/regress/sql/inherit.sql @@ -442,21 +442,21 @@ ORDER BY x, y; -- exercise rescan code path via a repeatedly-evaluated subquery explain (costs off) SELECT - (SELECT g.i FROM ( - (SELECT * FROM generate_series(1, 2) ORDER BY 1) + ARRAY(SELECT f.i FROM ( + (SELECT d + g.i FROM generate_series(4, 30, 3) d ORDER BY 1) UNION ALL - (SELECT * FROM generate_series(1, 2) ORDER BY 1) + (SELECT d + g.i FROM generate_series(0, 30, 5) d ORDER BY 1) ) f(i) - ORDER BY f.i LIMIT 1) + ORDER BY f.i LIMIT 10) FROM generate_series(1, 3) g(i); SELECT - (SELECT g.i FROM ( - (SELECT * FROM generate_series(1, 2) ORDER BY 1) + ARRAY(SELECT f.i FROM ( + (SELECT d + g.i FROM generate_series(4, 30, 3) d ORDER BY 1) UNION ALL - (SELECT * FROM generate_series(1, 2) ORDER BY 1) + (SELECT d + g.i FROM generate_series(0, 30, 5) d ORDER BY 1) ) f(i) - ORDER BY f.i LIMIT 1) + ORDER BY f.i LIMIT 10) FROM generate_series(1, 3) g(i); reset enable_seqscan; -- 1.8.2.rc2.4.g7799588.dirty
-- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs