↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

同样的行,SUM 出来的结果每次都不一样 RSS

用五百万行 double precision 读数做演示:三次完全相同的查询分别得到 2500519211.7874823 和 2500519211.7874575 等不同结果。原因是并行聚合让多个 worker 以不确定的顺序抓取数据块,部分和的合并顺序随之变化,而 IEEE 754 浮点加法不满足结合律,每一步舍入都会改变结果。需要对账的金额类数据应当存成 numeric,它按精确十进制累加,与并行度和聚合顺序无关。

发布于 2026-09-10T10:59:44.481988Z · Radim Marek · boringSQL
并行查询 浮点 聚合

用五百万行 double precision 读数做演示:三次完全相同的查询分别得到 2500519211.7874823 和 2500519211.7874575 等不同结果。原因是并行聚合让多个 worker 以不确定的顺序抓取数据块,部分和的合并顺序随之变化,而 IEEE 754 浮点加法不满足结合律,每一步舍入都会改变结果。需要对账的金额类数据应当存成 numeric,它按精确十进制累加,与并行度和聚合顺序无关。

用五百万行 double precision 读数做演示:三次完全相同的查询分别得到 2500519211.7874823 和 2500519211.7874575 等不同结果。原因是并行聚合让多个 worker 以不确定的顺序抓取数据块,部分和的合并顺序随之变化,而 IEEE 754 浮点加法不满足结合律,每一步舍入都会改变结果。需要对账的金额类数据应当存成 numeric,它按精确十进制累加,与并行度和聚合顺序无关。

原始来源 ↗

来源记录
  • center.info_item · 4aff8c9c20c1d0c6 · 2026-10-03T04:08:35.169032Z
  • pgweb.info_item · 4aff8c9c20c1d0c6 · 2026-10-03T04:08:55.967155Z