Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit b8d3dae

Browse files
committed
Improve error message for MaxAllocSize overrun in accumArrayResult.
Before, if you went past about 64M array elements in array_agg() and allied functions, you got a generic "invalid memory alloc request size" error. This patch replaces that with "array size exceeds the maximum allowed", which seems more user-friendly since it points you to needing to reduce the size of your array result. (This is the same error text you'd get from construct_md_array in the event of overrunning the maximum physical size for the finished array.) Per question from Shaozhong Shi. Since this hasn't come up often, I don't feel a need to back-patch. Discussion: https://postgr.es/m/CA+i5JwYtVS9z2E71PcNKAVPbOn4R2wuj-LqbJsYr_XOz73q7dQ@mail.gmail.com
1 parent 00f2a25 commit b8d3dae

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

src/backend/utils/adt/arrayfuncs.c

+6
Original file line numberDiff line numberDiff line change
@@ -5317,6 +5317,12 @@ accumArrayResult(ArrayBuildState *astate,
53175317
if (astate->nelems >= astate->alen)
53185318
{
53195319
astate->alen *= 2;
5320+
/* give an array-related error if we go past MaxAllocSize */
5321+
if (!AllocSizeIsValid(astate->alen * sizeof(Datum)))
5322+
ereport(ERROR,
5323+
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
5324+
errmsg("array size exceeds the maximum allowed (%d)",
5325+
(int) MaxAllocSize)));
53205326
astate->dvalues = (Datum *)
53215327
repalloc(astate->dvalues, astate->alen * sizeof(Datum));
53225328
astate->dnulls = (bool *)

0 commit comments

Comments
 (0)