Python FreeBSD上的postgresql 10在运行完全相同的查询时偶尔返回错误的浮点值

Python FreeBSD上的postgresql 10在运行完全相同的查询时偶尔返回错误的浮点值,python,postgresql,freebsd,postgresql-10,Python,Postgresql,Freebsd,Postgresql 10,到目前为止,我们一直在FreeBSD 11.2上运行postgresql server 9.6,并在上个月尝试升级到10.4版。本周,我们再次尝试升级到10.5,希望问题能够得到解决 升级后,运行此select查询时,我们会遇到以下行为: SELECT assets_daily.close FROM assets_daily INNER JOIN assets_daily_conditions ON (assets_daily.id = assets_daily_conditions.d

到目前为止,我们一直在FreeBSD 11.2上运行postgresql server 9.6,并在上个月尝试升级到10.4版。本周,我们再次尝试升级到10.5,希望问题能够得到解决

升级后,运行此select查询时,我们会遇到以下行为:

SELECT assets_daily.close 
FROM assets_daily 
  INNER JOIN assets_daily_conditions ON (assets_daily.id = assets_daily_conditions.daily_id) 
WHERE (assets_daily.asset_id = 139 AND assets_daily_conditions.condition_id = 117 AND assets_daily.close_diff_10 IS NOT NULL) 
ORDER BY assets_daily.date DESC
使用python库或仅使用postgresql附带的psql命令客户端工具,我们将偶尔获得不同的assets_daily.close值。因此,我们得到的不是正确的值,
10.8
而是
0
或者更奇怪的
.8

一次又一次地运行相同的查询,大约每运行10000次就会发生这种情况。有时是50岁之后,有时是20000岁甚至更多。所以它是非常零星的

这里有更多信息:assets_daily.close是一个float8字段。这些表格并不小(每天有800万条记录,每天有4500万条记录)。没有其他正在运行的客户端或进程同时访问数据库。我们将FreeBSD更新为最新的11.2R,并尝试使用二进制和端口版本安装postgresql-server10。服务器日志显示没有错误,并且有大量可用内存

我们首先尝试使用pg_升级进行升级,但在出现错误后,我们还尝试从9.6中转储pg_并重新导入到10.5中。同样的结果


我知道这是很难/不可能重现的,除非我们提供了一个非常详细的数据集示例等。但我希望可能有人有类似的问题,甚至可能有解决方案,或者有一些提示/想法,我们可以开始寻找解决方案。

不确定这是否相关,但是您的
--disable-float8-byval
选项的值是多少?@favoretti:默认值,但我认为这也没有关系,因为我们在这里不使用任何特殊函数。我们的配置选项:--with libraries=/usr/local/lib''--with includes=/usr/local/include''--启用线程安全“”--禁用调试“”--启用nls“”--不带pam“”--带openssl“”--不带-gssapi'如果将值以固定精度强制转换为数值会发生什么,它是否仍然不同?如果通过
max\u parallel\u workers\u per\u gather=0禁用并行性,请检查问题是否消失。有一个开放的bug#15324,看起来相关:@Marco,您可以通过
SET LOCAL
禁用单个事务的并行性,无需在实例范围内禁用它。或者,您可以为此特定查询创建一个专用用户,并执行
ALTER user…设置max\u parallel\u workers\u per\u gather=0