I'm trying to SUM 8 million floating point (REAL
) values with simple query like this:
SELECT SUM(metric) FROM metrics;
However, it returns very inaccurate result.
It should return 137,586.77, but it returns 137,303 (283.77 difference)
Is there a way to force a query to be more precise?
Best Answer
According to the documentation of the REAL datatype http://www.postgresql.org/docs/9.2/static/datatype-numeric.html#DATATYPE-FLOAT it has a precision of 6 decimal digits. That's what you are seeing. If you need more precision you need to use double or a number with fixed precision.
Maybe casting the reals to something more precise and summing the result will give you what you need, eg: