On 2016-03-26 19:29, Piotr Stefaniak wrote:
I'm not saying this is necessarily a bug since the whole function deals
with floats, but perhaps it's interesting to note that ndistinct can be
0 in src/backend/utils/adt/selfuncs.c:estimate_hash_bucketsize:
On the exact same note, something like this (again reduced from what
sqlsmith produced):
select 1
from unnest('{}'::boolean[]) a (x)
left join (
select *
from unnest('{}'::boolean[])
where false
) b (x) on a.x = b.x;
leads to vardata.rel->tuples being zero here:
if (vardata.rel)
ndistinct *= vardata.rel->rows / vardata.rel->tuples;
Back-trace attached.
#0 estimate_hash_bucketsize (root=0xf3cf98, hashkey=0xf44398, nbuckets=1024)
at src/backend/utils/adt/selfuncs.c:3543
#1 0x00000000007141a4 in final_cost_hashjoin (root=0xf3cf98, path=0xf47118,
workspace=0x7fffffffd950, sjinfo=0xf45460, semifactors=0x7fffffffdae8) at
src/backend/optimizer/path/costsize.c:2856
#2 0x000000000075c134 in create_hashjoin_path (root=0xf3cf98,
joinrel=0xf46438, jointype=JOIN_LEFT, workspace=0x7fffffffd950,
sjinfo=0xf45460, semifactors=0x7fffffffdae8, outer_path=0xf461a0,
inner_path=0xf45a98, restrict_clauses=0xf466f0, required_outer=0x0,
hashclauses=0xf471d8) at src/backend/optimizer/util/pathnode.c:2133
#3 0x000000000072074a in try_hashjoin_path (root=0xf3cf98, joinrel=0xf46438,
outer_path=0xf461a0, inner_path=0xf45a98, hashclauses=0xf471d8,
jointype=JOIN_LEFT, extra=0x7fffffffdad0) at
src/backend/optimizer/path/joinpath.c:523
#4 0x00000000007219e2 in hash_inner_and_outer (root=0xf3cf98,
joinrel=0xf46438, outerrel=0xf44cd0, innerrel=0xf44fa8, jointype=JOIN_LEFT,
extra=0x7fffffffdad0) at src/backend/optimizer/path/joinpath.c:1403
#5 0x0000000000720058 in add_paths_to_joinrel (root=0xf3cf98,
joinrel=0xf46438, outerrel=0xf44cd0, innerrel=0xf44fa8, jointype=JOIN_LEFT,
sjinfo=0xf45460, restrictlist=0xf466f0) at
src/backend/optimizer/path/joinpath.c:211
#6 0x0000000000722e38 in make_join_rel (root=0xf3cf98, rel1=0xf44cd0,
rel2=0xf44fa8) at src/backend/optimizer/path/joinrels.c:771
#7 0x00000000007222dd in make_rels_by_clause_joins (root=0xf3cf98,
old_rel=0xf44cd0, other_rels=0xf463b8) at
src/backend/optimizer/path/joinrels.c:274
#8 0x0000000000721f86 in join_search_one_level (root=0xf3cf98, level=2) at
src/backend/optimizer/path/joinrels.c:96
#9 0x000000000070dc4d in standard_join_search (root=0xf3cf98, levels_needed=2,
initial_rels=0xf46380) at src/backend/optimizer/path/allpaths.c:2124
#10 0x000000000070dbc6 in make_rel_from_joinlist (root=0xf3cf98,
joinlist=0xf452c8) at src/backend/optimizer/path/allpaths.c:2055
#11 0x000000000070b304 in make_one_rel (root=0xf3cf98, joinlist=0xf452c8) at
src/backend/optimizer/path/allpaths.c:175
#12 0x00000000007352be in query_planner (root=0xf3cf98, tlist=0xf440b8,
qp_callback=0x739ec7 <standard_qp_callback>, qp_extra=0x7fffffffde10) at
src/backend/optimizer/plan/planmain.c:246
#13 0x0000000000737d89 in grouping_planner (root=0xf3cf98, inheritance_update=0
'\000', tuple_fraction=0) at src/backend/optimizer/plan/planner.c:1673
#14 0x0000000000736535 in subquery_planner (glob=0xf3ad88, parse=0xf3a458,
parent_root=0x0, hasRecursion=0 '\000', tuple_fraction=0) at
src/backend/optimizer/plan/planner.c:758
#15 0x0000000000735688 in standard_planner (parse=0xf3a458, cursorOptions=256,
boundParams=0x0) at src/backend/optimizer/plan/planner.c:307
#16 0x00000000007353ca in planner (parse=0xf3a458, cursorOptions=256,
boundParams=0x0) at src/backend/optimizer/plan/planner.c:177
#17 0x0000000000800d28 in pg_plan_query (querytree=0xf3a458, cursorOptions=256,
boundParams=0x0) at src/backend/tcop/postgres.c:798
#18 0x0000000000800ddb in pg_plan_queries (querytrees=0xf3cf60,
cursorOptions=256, boundParams=0x0) at src/backend/tcop/postgres.c:857
#19 0x0000000000801080 in exec_simple_query (query_string=0xf077a8 "select
1\nfrom unnest('{}'::boolean[]) a (x)\nleft join (\n select *\n from
unnest('{}'::boolean[])\n where false\n) b (x) on a.x = b.x;") at
src/backend/tcop/postgres.c:1022
#20 0x0000000000805342 in PostgresMain (argc=1, argv=0xe958d0, dbname=0xe95730
"postgres", username=0xe95710 "me") at src/backend/tcop/postgres.c:4059
#21 0x000000000077ed31 in BackendRun (port=0xeb2950) at
src/backend/postmaster/postmaster.c:4258
#22 0x000000000077e495 in BackendStartup (port=0xeb2950) at
src/backend/postmaster/postmaster.c:3932
#23 0x000000000077ac19 in ServerLoop () at
src/backend/postmaster/postmaster.c:1690
#24 0x000000000077a24e in PostmasterMain (argc=3, argv=0xe94850) at
src/backend/postmaster/postmaster.c:1298
#25 0x00000000006c6216 in main (argc=3, argv=0xe94850) at
src/backend/main/main.c:228
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers