Re: BUG #15324: Non-deterministic behaviour from parallelised sub-query

From: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>
To: Marko Tiikkaja <marko(at)joh(dot)to>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Andres Freund <andres(at)anarazel(dot)de>, Andrew Fletcher <andy(at)prestigedigital(dot)com>, PostgreSQL mailing lists <pgsql-bugs(at)lists(dot)postgresql(dot)org>
Subject: Re: BUG #15324: Non-deterministic behaviour from parallelised sub-query
Date: 2018-08-14 11:09:19
Message-ID: CAA4eK1J-_LxN5hc6ikh=vZ4vr6Yt6eFM57gMHkFzBCRTo791Bg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Tue, Aug 14, 2018 at 3:52 PM, Marko Tiikkaja <marko(at)joh(dot)to> wrote:
> On Tue, Aug 14, 2018 at 7:10 AM, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>
> wrote:
>>
>> Yeah, one idea could be that we detect this in
>> max_parallel_hazard_walker during the very first pass it performs on
>> query-tree. Basically, in the SubLink node check, we can detect
>> whether the subselect has Limit/Offset clause and if so, then we can
>> treat it as parallel_unsafe. I have tried that way and it prohibits
>> the parallel plan for the reported queries. However, I think more
>> analysis and verification is required to see if it can happen in any
>> other related cases.
>
>
> This seems broken as well:
>
> create table qwr(a int not null, b int not null, c text not null);
> insert into qwr select i, i, (select prosrc from pg_proc where
> oid=11734) from generate_series(1, 128000) i;
> set parallel_setup_cost to 0;
> analyze qwr;
> select count(*) from qwr where (a, b) in (select a, row_number() over()
> from qwr);
>

I am getting below error in above steps:

postgres=# insert into qwr select i, i, (select prosrc from
pg_proc where oid=11734) from generate_series(1, 128000) i;
ERROR: null value in column "c" violates not-null constraint
DETAIL: Failing row contains (1, 1, null).

If I remove 'not null' constraint from column c, then the above
statement works fine, but I am getting below plan which is a serial
plan:

postgres=# Explain select count(*) from qwr where (a, b) in (select a,
row_number() over() from qwr)
QUERY PLAN
-----------------------------------------------------------------------------------------
Aggregate (cost=12360.00..12360.01 rows=1 width=8)
-> Hash Semi Join (cost=7272.00..12200.00 rows=64000 width=0)
Hash Cond: ((qwr.a = qwr_1.a) AND (qwr.b = (row_number() OVER (?))))
-> Seq Scan on qwr (cost=0.00..1847.00 rows=128000 width=8)
-> Hash (cost=4727.00..4727.00 rows=128000 width=12)
-> WindowAgg (cost=0.00..3447.00 rows=128000 width=12)
-> Seq Scan on qwr qwr_1 (cost=0.00..1847.00
rows=128000 width=4)
(7 rows)

I am not sure why I am not seeing the same problem as you.

--
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Marko Tiikkaja 2018-08-14 11:12:56 Re: BUG #15324: Non-deterministic behaviour from parallelised sub-query
Previous Message Marko Tiikkaja 2018-08-14 10:22:02 Re: BUG #15324: Non-deterministic behaviour from parallelised sub-query