Postgresql中的递减字段未按预期工作

Postgresql中的递减字段未按预期工作,sql,postgresql,Sql,Postgresql,所以我在玩Postgresql中增加字段的游戏。 假设我有一个问题表和一个名为vots的BIGINT字段,它的值已经是100000000 现在我想这样减少它: UPDATE questions SET votes=votes-31500000 WHERE id = 1; 不幸的是,由于某种原因,最终结果是该字段中的值为-21500000。 但是,如果我首先获取字段值,然后在代码中计算必要的递减值,而不是在SQL查询中,那么该值将正确计算为68500000,然后可以使用此查询设置: UPDATE

所以我在玩Postgresql中增加字段的游戏。 假设我有一个问题表和一个名为vots的BIGINT字段,它的值已经是100000000

现在我想这样减少它:

UPDATE questions SET votes=votes-31500000 WHERE id = 1;
不幸的是,由于某种原因,最终结果是该字段中的值为-21500000。 但是,如果我首先获取字段值,然后在代码中计算必要的递减值,而不是在SQL查询中,那么该值将正确计算为68500000,然后可以使用此查询设置:

UPDATE questions SET votes=#{calculated_value} WHERE id = 1;

不用说,由于并发性问题,后一种方法是不可接受的。因此,我的问题是:为什么Postgresql会以这种方式运行?如何使用SQL查询正确地递减该值?

我猜您正在将初始值设置为:

10,000,000
而不是

100,000,000
为清晰起见,添加了逗号


这是最简单的解释,为什么你的31500000减量会产生负值。

你的查询对我有用。。。张贴选择投票的结果,从id=1的问题中投票-31500000,是的,可能就是这样,谢谢你指出。我们需要对此进行调查。