我正在使用Rails 4.2和Postgres 9.4来try 新的JSONB数据类型.我数据库中的一个JSONB列包含一个数组,我希望能够查询该数组包含特定值的记录.我使用新的JSONB"问号"("contains")操作符解决了这个问题,如下所述:

因此,在原始SQL中,我可以让它像下面的示例一样工作:

SELECT * FROM people WHERE roles ? '32486d83-4a38-42ba-afdb-f77ca40ea1fc';

但我无法通过ActiveRecord从Rails内部进行此查询.我try 过使用"where"方法进行原始查询,如下所示:

Person.where("roles ? ?", "32486d83-4a38-42ba-afdb-f77ca40ea1fc")

但由于问号是用于替换参数的特殊字符,我得到了以下错误:

ActiveRecord::PreparedStatementInvalid:绑定变量的数量错误

我想我需要一种方法来逃离"?"因为我想让它通过字面意思.我试过\?和没有运气.

推荐答案

你应该这样称呼它:

Person.where("roles ? :name", name: "32486d83-4a38-42ba-afdb-f77ca40ea1fc")

Postgresql相关问答推荐

横向联接返回的行数太多

DBT-DBT依赖于未找到的源

如何删除Devtainer之前创建的PostgreSQL数据库?

列不明确

将整数(以毫秒为单位的epoch时间)转换为PrimitiveDateTime

正在加载 pgAdmin 4 v7.4...同时打开 pgAdmin

IF 块中的 CREATE FUNCTION 语句抛出错误,同时运行它自己的作品

如何创建一个触发器来传播对主键表的更新?

错误:分区表的唯一约束必须包括所有分区列

PostgreSQL 中的复制槽是否会阻止删除 WALL,即使它们来自另一个数据库?

在psql中,为什么有些命令没有效果?

查询仅属于特定部门的用户

无法识别的配置参数bytea_output

Django 1.9.2 AssertionError:database connection isn't set to UTC

将数据从 MS SQL 迁移到 PostgreSQL?

PostgreSQL 获取过go 12 小时的元素

如何使 array_agg() 像 mySQL 中的 group_concat() 一样工作

如何在postgresql中编写关于最大行数的约束?

PL/pgSQL 中的 BREAK 语句

如何从我的 postgresql 查询中获取最小值、中值和最大值?