【问题标题】:Heroku PG error on selectHeroku PG 选择错误
【发布时间】:2013-06-19 19:15:50
【问题描述】:

我有一段代码在开发环境中运行良好,但在生产环境中引发错误。这里是:

venue.badges.where(:active => true).select([:title, :desc, :bonus]).each do |badge|

在处理 MySQL 本地数据库时,它会在生产环境中触发:

ActiveRecord::StatementInvalid (PG::Error: ERROR:  syntax error at or near "desc"
: SELECT title, desc, bonus FROM "badges"  WHERE "badges"."venue_id" = 22 AND "badges"."active" = 't'):
LINE 1: SELECT title, desc, bonus FROM "badges"  WHERE "badges"."ven...

我真的不明白这里有什么问题。

【问题讨论】:

  • 错误的一件事是您在一个数据库之上进行开发并在另一个数据库之上进行部署,这只是通往痛苦和痛苦的捷径。数据库之间有很多细微的差异,没有 ORM 可以保护您免受这些差异的影响。

标签: ruby-on-rails postgresql activerecord heroku


【解决方案1】:

DESC 是 SQL 中的保留关键字。 This list of SQL and PostgreSQL keywords 是一个很好的参考。要将保留字用作列名,您需要用双引号对其进行转义:

SELECT title, "desc", bonus FROM badges WHERE ...

在 Rails 中,将其作为文字字符串而不是符号传递:

venue.badges.where(:active => true).select([:title, '"desc"', :bonus]).each do |badge|

【讨论】:

  • 或者更好的是,将列重命名为不是保留字的名称,从长远来看,这将不那么痛苦。
  • 非常感谢你们,伙计们!你帮了我很多!
猜你喜欢
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2017-04-16
相关资源
最近更新 更多