On 01/16/2014 08:59 PM, Tom Lane wrote:
Heikki Linnakangas <hlinnakan...@vmware.com> writes:
I propose that we reimplement sum(bigint) in a more efficient way: For
the internal state, let's use an int8 and a numeric overflow field. The
transition function adds to the int8 variable, and checks for overflow.
On overflow, increment the numeric field by one. In the final function,
multiply the numeric by 2^64, and add the residual int8 value.

It'd probably be sufficient to handle it as two int64 fields (handmade
128-bit arithmetic, or maybe even not so handmade if that ever gets
reasonably common among C compilers).

True. That would be sufficient for summing 2^64 int8s of INT64_MAX. That sounds like enough, especially considering that that count() will overflow after that too.

 You're assuming the final output is still numeric, right?

Yep.

- Heikki


--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to