如何将 Rails 与大写列名一起使用?
How to use Rails with uppercase column name?
我有以下内容作为 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
?
这不是 ActiveRecord 或 AREL 问题,这正是区分大小写在 SQL 和 PostgreSQL.
中的工作原理
SQL 中的标识符(例如 table 和列名)不区分大小写,除非它们被引用。标准 SQL 说不带引号的标识符被折叠成大写,PostgreSQL 将它们折叠成小写,因此错误消息中的 bar.maxusers
。
解决方案是引用有问题的列名:
.having('COUNT(foo.id) > bar."maxUsers"')
请注意,您必须使用双引号来引用标识符,因为单引号仅适用于字符串文字。另请注意,标识符引用是特定于数据库的:标准 SQL 和 PostgreSQL 使用双引号,MySQL 使用反引号,SQL 服务器使用方括号,...
我有以下内容作为 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
?
这不是 ActiveRecord 或 AREL 问题,这正是区分大小写在 SQL 和 PostgreSQL.
中的工作原理SQL 中的标识符(例如 table 和列名)不区分大小写,除非它们被引用。标准 SQL 说不带引号的标识符被折叠成大写,PostgreSQL 将它们折叠成小写,因此错误消息中的 bar.maxusers
。
解决方案是引用有问题的列名:
.having('COUNT(foo.id) > bar."maxUsers"')
请注意,您必须使用双引号来引用标识符,因为单引号仅适用于字符串文字。另请注意,标识符引用是特定于数据库的:标准 SQL 和 PostgreSQL 使用双引号,MySQL 使用反引号,SQL 服务器使用方括号,...