Re: BUG #15324: Non-deterministic behaviour from parallelised sub-query
От | Amit Kapila |
---|---|
Тема | Re: BUG #15324: Non-deterministic behaviour from parallelised sub-query |
Дата | |
Msg-id | CAA4eK1J-_LxN5hc6ikh=vZ4vr6Yt6eFM57gMHkFzBCRTo791Bg@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: BUG #15324: Non-deterministic behaviour from parallelised sub-query (Marko Tiikkaja <marko@joh.to>) |
Ответы |
Re: BUG #15324: Non-deterministic behaviour from parallelised sub-query
|
Список | pgsql-bugs |
On Tue, Aug 14, 2018 at 3:52 PM, Marko Tiikkaja <marko@joh.to> wrote: > On Tue, Aug 14, 2018 at 7:10 AM, Amit Kapila <amit.kapila16@gmail.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
В списке pgsql-bugs по дате отправления: