Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何使用uuid搜索数据库?_Postgresql_Elixir_Ecto - Fatal编程技术网

Postgresql 如何使用uuid搜索数据库?

Postgresql 如何使用uuid搜索数据库?,postgresql,elixir,ecto,Postgresql,Elixir,Ecto,我正在使用phoenix框架和postgresql 为了实现搜索功能,我使用了ilikeexto查询,所有的搜索功能都可以正常工作。例如,我有一个搜索带有产品名称的产品的功能,它非常有效 def item_searh_results(language_id, name) do from(p in ItemLanguage, where: p.language_id == ^language_id and ilike(p.nam

我正在使用phoenix框架和postgresql

为了实现搜索功能,我使用了
ilike
exto查询,所有的搜索功能都可以正常工作。例如,我有一个搜索带有产品名称的产品的功能,它非常有效

def item_searh_results(language_id, name) do
  from(p in ItemLanguage, where: p.language_id == ^language_id 
                                and ilike(p.name, ^("%#{name}%")),
                        select: %{id: p.item_id,
                                  name: p.name}) |> Repo.all
end
我有一个模型,
Sales
,它使用
uuid
作为主键

我正在尝试使用类似上述函数的
ilike
ecto查询api来搜索销售。所以我提出了类似的问题

from(p in Sales, where: ilike(p.id, ^("%#{id}%")))|> Repo.all
但是,它返回一个错误
**(Postgrex.error)error 42883(未定义的函数):运算符不存在:uuid~~*未知
是否可以使用
ilike
查询进行搜索?如果是,我做错了什么


先谢谢你

我假设您希望在UUID的十六进制表示形式中执行子字符串搜索(例如,
%a%“
应该匹配,
%e%”
不应该匹配
015cd1d7-2794-4247-a24f-16b84ca9a3ac
)。您可以通过显式地将UUID值转换为
文本
,然后执行
ilike

from(p in Sales, where: ilike(fragment("?::text", p.id), ^"%#{id}%")) |> Repo.all

(我还删除了搜索字符串周围的一组冗余括号。)

我假设您要在UUID的十六进制表示形式中执行子字符串搜索(例如,
%a%“
应该匹配,
%e%”
不应该匹配
015cd1d7-2794-4247-a24f-16b84ca9a3ac
)。您可以通过显式地将UUID值转换为
文本
,然后执行
ilike

from(p in Sales, where: ilike(fragment("?::text", p.id), ^"%#{id}%")) |> Repo.all

(我还删除了搜索字符串周围的一组多余括号。)

是的,这就是我要搜索的方式。现在我明白了,为了使用UUID进行搜索,我需要将其转换为
文本
。我刚刚尝试了您的解决方案,但它触发了一个错误,
type(p.id(),:text)
不是有效的查询表达式。。是否有其他方法将其转换为文本?请您尝试一下编辑后的版本?我把
类型
切换到
片段
。我很确定这会有用的。是的,这就是我想搜索的方式。现在我明白了,为了使用UUID进行搜索,我需要将其转换为
文本
。我刚刚尝试了您的解决方案,但它触发了一个错误,
type(p.id(),:text)
不是有效的查询表达式。。是否有其他方法将其转换为文本?请您尝试一下编辑后的版本?我把
类型
切换到
片段
。我很确定这应该行得通。