Re: ERROR: ORDER/GROUP BY expression not found in targetlist - Mailing list pgsql-hackers
| From | Tom Lane |
|---|---|
| Subject | Re: ERROR: ORDER/GROUP BY expression not found in targetlist |
| Date | |
| Msg-id | 20756.1465834072@sss.pgh.pa.us Whole thread Raw |
| In response to | Re: ERROR: ORDER/GROUP BY expression not found in targetlist (Tom Lane <tgl@sss.pgh.pa.us>) |
| Responses |
Re: ERROR: ORDER/GROUP BY expression not found in targetlist
Re: ERROR: ORDER/GROUP BY expression not found in targetlist Re: ERROR: ORDER/GROUP BY expression not found in targetlist |
| List | pgsql-hackers |
I wrote:
> Amit Kapila <amit.kapila@enterprisedb.com> writes:
>> It is slightly tricky to write a reproducible parallel-query test, but
>> point taken and I think we should try to have a test unless such a test is
>> really time consuming.
> BTW, decent regression tests could be written without the need to create
> enormous tables if the minimum rel size in create_plain_partial_paths()
> could be configured to something less than 1000 blocks. I think it's
> fairly crazy that that arbitrary constant is hard-wired anyway. Should
> we make it a GUC?
Just as an experiment to see what would happen, I did
- int parallel_threshold = 1000;
+ int parallel_threshold = 1;
and ran the regression tests. I got a core dump in the window.sql test:
Program terminated with signal 11, Segmentation fault.
#0 0x0000000000664dbc in make_partialgroup_input_target (root=0x1795018, input_rel=0x17957a8, target=0x17bf228,
rollup_lists=0x0, rollup_groupclauses=0x0) at planner.c:4307
4307 Index sgref = final_target->sortgrouprefs[i];
(gdb) bt
#0 0x0000000000664dbc in make_partialgroup_input_target (root=0x1795018, input_rel=0x17957a8, target=0x17bf228,
rollup_lists=0x0, rollup_groupclauses=0x0) at planner.c:4307
#1 create_grouping_paths (root=0x1795018, input_rel=0x17957a8, target=0x17bf228, rollup_lists=0x0,
rollup_groupclauses=0x0) at planner.c:3420
#2 0x0000000000667405 in grouping_planner (root=0x1795018, inheritance_update=0 '\000', tuple_fraction=0) at
planner.c:1794
#3 0x0000000000668c80 in subquery_planner (glob=<value optimized out>, parse=0x1703580, parent_root=<value
optimizedout>, hasRecursion=<value optimized out>, tuple_fraction=0) at planner.c:769
#4 0x0000000000668ea5 in standard_planner (parse=0x1703580, cursorOptions=256, boundParams=0x0) at planner.c:308
#5 0x00000000006691b6 in planner (parse=<value optimized out>, cursorOptions=<value optimized out>,
boundParams=<valueoptimized out>) at planner.c:178
#6 0x00000000006fb069 in pg_plan_query (querytree=0x1703580, cursorOptions=256, boundParams=0x0) at postgres.c:798
(gdb) p debug_query_string
$1 = 0x1702078 "SELECT SUM(COUNT(f1)) OVER () FROM int4_tbl WHERE f1=42;"
which I think may be another manifestation of the failure-to-apply-proper-
pathtarget issue we're looking at in this thread. Or maybe it's just
an unjustified assumption in make_partialgroup_input_target that the
input path must always have some sortgrouprefs assigned.
Before getting to that point, there was also an unexplainable plan change:
*** /home/postgres/pgsql/src/test/regress/expected/aggregates.out Thu Apr 7 21:13:14 2016
--- /home/postgres/pgsql/src/test/regress/results/aggregates.out Mon Jun 13 11:54:01 2016
***************
*** 577,590 **** explain (costs off) select max(unique1) from tenk1 where unique1 > 42000;
! QUERY PLAN
! ---------------------------------------------------------------------------
! Result
! InitPlan 1 (returns $0)
! -> Limit
! -> Index Only Scan Backward using tenk1_unique1 on tenk1
! Index Cond: ((unique1 IS NOT NULL) AND (unique1 > 42000))
! (5 rows) select max(unique1) from tenk1 where unique1 > 42000; max
--- 577,588 ---- explain (costs off) select max(unique1) from tenk1 where unique1 > 42000;
! QUERY PLAN
! ----------------------------------------------------
! Aggregate
! -> Index Only Scan using tenk1_unique1 on tenk1
! Index Cond: (unique1 > 42000)
! (3 rows) select max(unique1) from tenk1 where unique1 > 42000; max
I would not be surprised at a change to a parallel-query plan, but there's
no parallelism here, so what happened? This looks like a bug to me.
(Also, doing this query without COSTS OFF shows that the newly selected
plan actually has a greater estimated cost than the expected plan, which
makes it definitely a bug.)
At this point I'm pretty firmly convinced that we should have a way to
run the regression tests with parallel scans considered for even very
small tables. If someone doesn't want that way to be a GUC, you'd better
propose another solution.
regards, tom lane
pgsql-hackers by date: