我想写一个Rails ActiveRecord查询,它可以匹配带有SQL LIKE
通配符的jsonb数据库列,就像它是一个字符串或文本字段一样。换句话说,我试图匹配jsonb中的一个子字符串,不管这个子字符串可能出现在什么键或值中。
尝试使用LIKE
查询字符串的正常方法不起作用:
MyModel.where("a_jsonb_column LIKE ?", "%substring%").first
此尝试返回错误:
ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR: operator does not exist: jsonb ~~ unknown
LINE 1: ...on_at" FROM "my_model" WHERE (a_jsonb_column LIKE '%subs...
^
SQL LIKE似乎有问题,可能是因为它不适用于这种数据类型。也许我必须将jsonb转换为字符串?我不确定在ActiveRecord中执行此操作的最佳方法。我的数据库是Postgres 14.7通过自制程序。
1条答案
按热度按时间djmepvbi1#
ActiveRecord的功能之一是将应用程序代码与数据库细节隔离开来。但是,当不考虑数据库依赖性时,这样做可能是可以接受的。您可以使用
a_jsonb_column::text
将列转换为文本。请记住,substring 可能匹配但不存在于任何键或值中;例如'": "'
。