Postgres weird PG::UndefinedColumn: ERROR: on value



使用activerecord执行简单的select - where操作时,

ActiveRecord::Base.connection.execute('select * from spree_variants where sku = "1SB-E4196-00";')

我得到这个错误:

from /Users/abc/.rvm/gems/ruby-2.7.2@cboparts/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/postgresql/database_statements.rb:92:in `exec'
Caused by PG::UndefinedColumn: ERROR:  column "1SB-E4196-00" does not exist
LINE 1: select * from spree_variants where sku = "1SB-E4196-00";

为什么考虑"1SB-E4196-00"作为列而不是SKU?这个错误似乎有误导性。

因为PostgreSQL期望字符串用单引号括起来。而双引号有不同的含义:

还有第二种标识符:带分隔符或引号的标识符。它是由双引号(")中包含的任意字符序列组成的。分隔符始终是标识符,而不是关键字。

这意味着如果以下查询应该工作:

ActiveRecord::Base.connection.execute(
"select * from spree_variants where sku = '1SB-E4196-00';"
)

顺便说一句,如果你正在使用Rails并且有一个SpreeVariant模型,那么你可以在控制台中看到Rails如何格式化和转义这样的查询:

puts SpreeVariant.where(sku: '1SB-E4196-00').to_sql

相关内容

  • 没有找到相关文章

最新更新