How to make postgresql SUM to be more accurate on large amount of floating point data? 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?
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:

SELECT SUM(metric::double) FROM metrics;