我在尝试向 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
但是,当我在另一台装有 PostgreSQL 8.4.4 的机器上尝试相同的插入时,插入可以正常完成。当我执行选择以验证该值是否存在时,它也可以正常完成:
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
列的类型是double precision
,根据文档,它是“15 位十进制数字精度”。这个错误是有道理的,我确实在它的范围之外,所以我对这个错误不是很惊讶。不过,这是我的问题:
数据库的二进制格式不会随着次要版本而改变。为什么这甚至在 8.4.4 而不是 8.4.20 中起作用?
我没有在变更日志中找到任何可以解释这一点的内容: https ://bucardo.org/postgres_all_versions.html
如果我使用 select 从现有记录中获取值,为什么数据库仍然允许我插入该值?
我可能会根据我观察到的内容发布这个问题的答案,但如果有人能更深入地了解这个问题,那就太好了。
您要求的软件在 2014 年 7 月停产。它远未受支持。我不确定我是否信任这些版本的 git。通过回购协议转移的工作可能很草率。您可能必须返回 SVN 才能获得权威答案,但这似乎是负责任的......
你可以在这里看到关于这个的线程。