我正在使用 MySQL 数据库迁移一些已经运行了很长时间的查询,这些数据库现在在 Postgres 中具有相同的结构。我被一个简单的圆形函数卡住了,它以以下错误消息结尾。
错误:函数round(双精度,整数)不存在
部分选择不起作用:
round(floor(pools.available_capacity_in_kb/1024/1024/1024*100)/100,2) as free,
pools.available_capacity_in_kb
在数据库中存储为 BIGINT (Postgres 10.9)
原文由 radek lopatecki 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题的核心在其他地方。 PostgreSQL 对整数和 bigint 数使用长除法(当除法的两个部分都是 int、bigint 值时)。所以
pools.available_capacity_in_kb/1024/1024/1024*100)/100
的结果是bigint。可能这不是您所期望的。—没有任何
round
bigint
(因为它没有任何意义)。请尝试使用浮点除法来修复它现在,结果将是
numeric
,并且函数round(numeric, int)
存在 - 所以它应该可以工作。