> HashAggregate doesn't have any ability to spill to disk. The planner
> will not select a HashAggregate if it thinks the required hash table
> would be larger than work_mem. What you've evidently got here is a
> misestimate of the required hash table size, which most likely is
> stemming from a bad estimate of the number of groups. How does that
> estimate (12617088 here) compare to reality? Have you tried increasing
> the statistics target for partner_id and keyword (or the whole table)?
Looking at the pg_statistics table the stats for one of the columns
(keyword) is seriously underestimated.
By increasing the stats target to 1000 it gets a bit better but still
underestimated by a a factor of about 10.
I guess that's why postgresql thinks it can fit it all into a hash.
Thanks for the help.
Cheers
Rob