On Tue, Apr 8, 2014 at 6:32 PM, Tom Lane <tgl@xxxxxxxxxxxxx> wrote:
Well, here's the problem:> ExprContext: 812638208 total in 108 blocks; 183520 free (171So something involved in _expression_ evaluation is eating memory.
> chunks); 812454688 used
Looking at the query itself, I'd have to bet on this:
My guess is that this aggregation is being done across a lot more rows
> ARRAY_TO_STRING(ARRAY_AGG(MM.ID::CHARACTER VARYING), ',')
than you were expecting, and the resultant array/string therefore eats
lots of memory. You might try replacing that with COUNT(*), or even
better SUM(LENGTH(MM.ID::CHARACTER VARYING)), just to get some definitive
evidence about what the query is asking to compute.
The devs have moved on and want to stick with their new query, so I'll just chalk this up to a bad query and let it go. But I'm glad to have learned a few new tricks, thanks.
Meanwhile, it seems like ulimit -v would provide the safety valve
you asked for originally.
Thank you Amador and Tom for the ulimit solution, that's exactly what I needed.