On 2013-08-30 18:55:53 -0400, Tom Lane wrote:
> Andres Freund <and...@2ndquadrant.com> writes:
> > On 2013-08-30 23:05:25 +0200, Andres Freund wrote:
> >> ExecReScanMergeAppend resets ms_initialized, but doesn't clear the
> >> binaryheap. Thus no new elements fit.
> 
> > Ok, patch for that attached.
> 
> I think the comments need a bit of copy-editing, but looks good otherwise.
> Will fix and commit.

Thanks.

> > Should we add
> > SELECT (SELECT g.i FROM ((SELECT random()::int ORDER BY 1 OFFSET 0) UNION 
> > ALL (SELECT random()::int ORDER BY 1 OFFSET 0)) f(i) ORDER BY f.i LIMIT 1) 
> > FROM generate_series(1, 10) g(i);
> > as a regression test? I slightly on the "no" side...
> 
> 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:

SELECT
-- correlated subquery, with dependency on outer query, to force rescans
-- which will be planned as a merge-append.
    (SELECT g.i FROM (
        (SELECT * FROM generate_series(1, 2) ORDER BY 1)
        UNION ALL
        (SELECT * FROM generate_series(1, 2) ORDER BY 1)
    ) f(i)
    ORDER BY f.i LIMIT 1)
FROM generate_series(1, 3) g(i);

I couldn't find a simpler testcase within some minutes...

Greetings,

Andres Freund

-- 
 Andres Freund                     http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to