Fix some issues in new hashtable size calculations in nodeHash.c.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 4 Oct 2015 18:06:40 +0000 (14:06 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 4 Oct 2015 18:06:50 +0000 (14:06 -0400)
commita31e64d0652622d4627ffa2123163a43538a3f51
treee933a65de734b275b7aa8ed53e0982d67035e8b7
parent1edd4ec831458e10b524d1473a7de5791aa8753e
Fix some issues in new hashtable size calculations in nodeHash.c.

Limit the size of the hashtable pointer array to not more than
MaxAllocSize, per reports from Kouhei Kaigai and others of "invalid memory
alloc request size" failures.  There was discussion of allowing the array
to get larger than that by using the "huge" palloc API, but so far no proof
that that is actually a good idea, and at this point in the 9.5 cycle major
changes from old behavior don't seem like the way to go.

Fix a rather serious secondary bug in the new code, which was that it
didn't ensure nbuckets remained a power of 2 when recomputing it for the
multiple-batch case.

Clean up sloppy division of labor between ExecHashIncreaseNumBuckets and
its sole call site.
src/backend/executor/nodeHash.c
src/include/executor/hashjoin.h