我实际上试图在ecto中运行此查询,但使用参数化值:
select * from accounts.businesses where admins @> '{1234}';
这就是我的函数定义:
def get_businesses_by_id(id) do
from(b in Businesses, where: fragment("? @> '{?}'", b.admins, ^id))
|> Repo.all()
end
但出现以下错误:
**(ArgumentError)参数的长度必须为0,用于查询%Postgrex.Query
如果我直接在其中硬编码该值,那么它将起作用:
def get_businesses_by_id(id) do
from(b in Businesses, where: fragment("? @> '{1234}'", b.admins))
|> Repo.all()
end
对我如何有效地设置ID值有任何见解?
答案 0 :(得分:3)
您不能在字符串中使用“占位符”,但不需要字符串,需要数组,因此可以:
fragment("? @> ?", b.admins, ^[id])
但是作为GIN index also supports =
operator on arrays,它也应该与ANY
一起使用,因此您可以编写:
where: ^id in b.admins
答案 1 :(得分:0)