You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails ActiveRecord查询PostgreSQL驼峰列提示不存在如何解决?

问题成因

  • PostgreSQL默认对未用双引号包裹的SQL标识符(列名、表名等)会自动转换为全小写,你创建advertiserName列时使用了驼峰命名且保留了大小写,查询时如果没有给列名加双引号,PostgreSQL就会将其转为advertisername去匹配,自然找不到对应列。
  • 下划线命名的列本身就是全小写格式,自动转译后不会出现匹配错误,所以同类下划线列的查询可以正常执行。
  • 带表前缀但未给列加双引号的写法也会触发同样的转译规则,因此修改后仍然报错。

解决方案

方案1:给原生SQL中的驼峰列名加双引号

如果要保留原生SQL的写法,直接给驼峰列名包裹双引号即可解决转译问题:

# 基础写法
Listing.where('"advertiserName" LIKE ?', '%lowes%')

# 带表前缀的写法
Listing.where('"listings"."advertiserName" LIKE ?', '%lowes%')

该方案无需修改现有表结构,适合快速修复现有查询。

方案2:使用Rails ActiveRecord内置查询语法

使用哈希查询或者Arel语法,Rails会自动处理列名的大小写转义,无需手动编写原生SQL片段:

# Arel写法适配模糊查询场景
Listing.where(Listing.arel_table[:advertiserName].matches('%lowes%'))

该方案更符合Rails开发规范,避免手动处理SQL转义细节。

方案3(长期推荐):统一数据库列名为下划线命名

Rails默认约定数据库字段使用蛇形(下划线)命名,模型层会自动映射为驼峰属性。如果项目还在可调整阶段,可以将advertiserName重命名为advertiser_name,后续所有查询都无需额外处理大小写问题,和项目内其他字段的使用逻辑保持一致。


内容的提问来源于stack exchange,提问作者stevec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:00:03