" ActionView :: Template ::错误(PG :: UndefinedFunction:错误:函数和(字符变化)不存在"仅在使用.sum生成时出现错误

时间:2017-07-30 21:44:13

标签: ruby-on-rails ruby postgresql heroku

上面的错误是我在Heroku上尝试使用.sum时得到的错误。我不知道问题是什么,也无法测试它,因为一切都在开发上工作正常。 .sum代码是:

CallLog.where(date: Date.today).sum(:duration).round(3)

持续时间列是小数。

1 个答案:

答案 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是一个数字(例如秒数)