上面的错误是我在Heroku上尝试使用.sum时得到的错误。我不知道问题是什么,也无法测试它,因为一切都在开发上工作正常。 .sum代码是:
CallLog.where(date: Date.today).sum(:duration).round(3)
持续时间列是小数。
答案 0 :(得分:1)
这是因为您的duration
列在生产中属于varchar
类型。
也许您在开始时使用错误的数据类型定义它,然后在迁移文件中更改它?
您可以通过以下方式找到当前类型:
SELECT pg_typeof(duration) FROM call_logs LIMIT 1
您需要使用以下内容更改类型:
alter table call_logs alter column duration type numeric(10,0) using duration::numeric
仅当列包含可以转换为数字的数据时,此方法才有效。如果不是,using
部分将失败。在这种情况下清理数据,然后再尝试更改它。
请务必先备份数据库并为您的案例选择正确的类型(https://www.postgresql.org/docs/9.6/static/datatype-numeric.html)。
注意:我假设duration
是一个数字(例如秒数)