Eu vi este erro ao tentar realizar a seguinte inserção em um PostgreSQL 8.4.20:
java.sql.BatchUpdateException: Batch entry 12 insert into perf_raw_2017_03_16 values ('3129', '182', '818', '2017-03-20 16:01:17.507000 +00:00:00', '4.9E-324') was aborted. Call getNextException to see the cause.
org.postgresql.util.PSQLException: ERROR: "4.9E-324" is out of range for type double precision
No entanto, quando tento a mesma inserção em uma máquina diferente com o PostgreSQL 8.4.4, a inserção termina bem. Quando faço um select para verificar se o valor está lá, ele também finaliza bem:
select * from perf_raw_2017_03_20 where guid_key=3129 and property_key=182;
guid_key | property_key | instance_id_key | time_stamp | value
----------+--------------+-----------------+-------------------------+-----------------------
3129 | 182 | 818 | 2017-03-20 16:01:17.507 | 4.94065645841247e-324
O tipo da coluna é double precision
, que, segundo a documentação, é "precisão de 15 dígitos decimais". O erro faz sentido, estou realmente fora de seu alcance, então não estou muito surpreso com o erro. Aqui estão minhas perguntas embora:
O formato binário do banco de dados não muda com versões secundárias. Por que isso funcionou no 8.4.4 e não no 8.4.20?
Não encontrei nada no changelog que explicasse isso: https://bucardo.org/postgres_all_versions.html
Por que o banco de dados ainda me permite inserir o valor se eu usar um select para obtê-lo de um registro existente?
Provavelmente postarei uma resposta para essa pergunta com base no que observei, mas seria legal se alguém pudesse fornecer uma visão mais profunda desse problema.
Você está solicitando um software que foi EOL em julho de 2014. Está longe de ser compatível. Não tenho certeza se confio no git nesses lançamentos. O trabalho de transferência pelo repositório pode ter sido desleixado. Você pode ter que voltar ao SVN para obter uma resposta autorizada, mas isso parece ser o responsável ...
Você pode ver o tópico sobre isso aqui.