Re: [HACKERS] [BUGS] [postgresql 10 beta3] unrecognized node type: 90 - Mailing list pgsql-hackers
From | Tom Lane |
---|---|
Subject | Re: [HACKERS] [BUGS] [postgresql 10 beta3] unrecognized node type: 90 |
Date | |
Msg-id | 2941.1502979564@sss.pgh.pa.us Whole thread Raw |
In response to | Re: [HACKERS] [BUGS] [postgresql 10 beta3] unrecognized node type: 90 (Amit Kapila <amit.kapila16@gmail.com>) |
Responses |
Re: [HACKERS] [BUGS] [postgresql 10 beta3] unrecognized node type: 90
|
List | pgsql-hackers |
Amit Kapila <amit.kapila16@gmail.com> writes: > On Tue, Aug 15, 2017 at 7:16 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> I should think it wouldn't be that expensive to create a test >> case, if you already have test cases that invoke GatherMerge. >> Adding a right join against a VALUES clause with a small number of >> entries, and a non-mergeable/hashable join clause, ought to do it. > I have done some experiments based on this idea to generate a test, > but I think it is not as straightforward as it appears. I did this (the first 4 SETs duplicate what's already used in select_parallel.sql): regression=# set parallel_setup_cost=0; SET regression=# set parallel_tuple_cost=0; SET regression=# set min_parallel_table_scan_size=0; SET regression=# set max_parallel_workers_per_gather=4; SET regression=# set enable_hashagg TO 0; SET regression=# set enable_material TO 0; SET regression=# explain select * from (select string4, count((unique2)) from tenk1 group by string4 order by string4) ss right join (values(1),(2)) v(x) on true; QUERY PLAN --------------------------------------------------------------------------------------------------Nested Loop Left Join (cost=524.15..1086.77 rows=8 width=76) -> Values Scan on "*VALUES*" (cost=0.00..0.03 rows=2 width=4) -> Finalize GroupAggregate (cost=524.15..543.29 rows=4 width=72) Group Key: tenk1.string4 -> Gather Merge (cost=524.15..543.17rows=16 width=72) Workers Planned: 4 -> Partial GroupAggregate (cost=524.10..542.89rows=4 width=72) Group Key: tenk1.string4 -> Sort (cost=524.10..530.35rows=2500 width=68) Sort Key: tenk1.string4 -> ParallelSeq Scan on tenk1 (cost=0.00..383.00 rows=2500 width=68) (11 rows) regression=# select * from (select string4, count((unique2)) from tenk1 group by string4 order by string4) ss right join (values(1),(2)) v(x) on true; server closed the connection unexpectedly So, not only is it not that hard to reach ExecReScanGatherMerge, but there is indeed a bug to fix there somewhere. The stack trace indicates that the failure occurs in a later execution of ExecGatherMerge: Program terminated with signal 11, Segmentation fault. #0 0x000000000064b4e4 in swap_nodes (heap=0x15a9440) at binaryheap.c:223 223 heap->bh_nodes[a] = heap->bh_nodes[b]; (gdb) bt #0 0x000000000064b4e4 in swap_nodes (heap=0x15a9440) at binaryheap.c:223 #1 binaryheap_remove_first (heap=0x15a9440) at binaryheap.c:189 #2 0x0000000000634196 in gather_merge_getnext (pstate=<value optimized out>) at nodeGatherMerge.c:479 #3 ExecGatherMerge (pstate=<value optimized out>) at nodeGatherMerge.c:241 #4 0x00000000006251fe in ExecProcNode (aggstate=0x157a6d0) at ../../../src/include/executor/executor.h:249 #5 fetch_input_tuple (aggstate=0x157a6d0) at nodeAgg.c:688 #6 0x0000000000629264 in agg_retrieve_direct (pstate=<value optimized out>) at nodeAgg.c:2313 #7 ExecAgg (pstate=<value optimized out>) at nodeAgg.c:2124 #8 0x00000000006396ef in ExecProcNode (pstate=0x1579d98) at ../../../src/include/executor/executor.h:249 #9 ExecNestLoop (pstate=0x1579d98) at nodeNestloop.c:160 #10 0x000000000061bc3f in ExecProcNode (queryDesc=0x14d5570, direction=<value optimized out>, count=0, execute_once=-104'\230') at ../../../src/include/executor/executor.h:249 #11 ExecutePlan (queryDesc=0x14d5570, direction=<value optimized out>, count=0, execute_once=-104 '\230') at execMain.c:1693 #12 standard_ExecutorRun (queryDesc=0x14d5570, direction=<value optimized out>, count=0, execute_once=-104 '\230') atexecMain.c:362 regards, tom lane
pgsql-hackers by date: