作为AR查询的一部分,我有以下内容:
.having('COUNT(foo.id) > bar.maxUsers')
这会生成一个错误:
ActiveRecord::StatementInvalid:
PG::UndefinedColumn: ERROR: column bar.maxusers does not exist
^
HINT: Perhaps you meant to reference the column "bar.maxUsers".
我引用的是列bar.maxUsers
。
因此,很明显,AR降低了查询的大小写。如何抑制这种行为?
Rails 4.2.10
PostgreSQL
编辑: SQL:
SELECT ... HAVING COUNT(foo.id) > bar.maxUsers
因此,这是在to_sql
之后发生的。也许是从execute
发布于 2018-08-24 06:01:34
这不是ActiveRecord或AREL的问题,这只是在SQL和PostgreSQL中区分大小写的方式。
SQL中的标识符(如表名和列名)是不区分大小写的,除非用引号引起来。标准SQL表示未加引号的标识符被折叠成大写,而PostgreSQL将它们折叠成小写,因此错误消息中出现了bar.maxusers
。
解决方案是引用有问题的列名:
.having('COUNT(foo.id) > bar."maxUsers"')
请注意,您必须使用双引号来引用标识符,因为单引号仅用于字符串文字。还要注意,标识符引用是特定于数据库的:标准SQL和PostgreSQL使用双引号,MySQL使用反引号,SQL Server使用方括号,...
https://stackoverflow.com/questions/51994652
复制相似问题