Estou tentando SOMAR 8 milhões de REAL
valores de ponto flutuante ( ) com uma consulta simples como esta:
SELECT SUM(metric) FROM metrics;
No entanto, ele retorna um resultado muito impreciso. Deve retornar 137.586,77, mas retorna 137.303 (diferença de 283,77)
Existe uma maneira de forçar uma consulta a ser mais precisa?
De acordo com a documentação do postgresql ,
Como você usou o tipo de dados real, pode converter os valores reais em numéricos. Então você pode obter resultados como você esperava.
De acordo com a documentação do tipo de dados REAL http://www.postgresql.org/docs/9.2/static/datatype-numeric.html#DATATYPE-FLOAT ele tem uma precisão de 6 dígitos decimais. Isso é o que você está vendo. Se você precisar de mais precisão, precisará usar double ou um número com precisão fixa.
Talvez converter os reais para algo mais preciso e somar o resultado dê o que você precisa, por exemplo:
SELECT SUM(metric::float) FROM métricas;