我试图创建一个接受 uuid 列表作为参数的函数。
我的代码:
create or replace function get_child_groups(input_parents_id uuid[])
returns table(id uuid, name text, parent_id uuid)
as
$$
WITH RECURSIVE c AS (
SELECT da.*
from device_group_v2 d
JOIN device_group_associations da on da.parent_id = d.id
where d.id in (input_parents_id)
UNION ALL
SELECT sa.*
FROM device_group_associations AS sa JOIN c ON c.child_id = sa.parent_id)
select * from(select d.* from c join device_group_v2 d on c.parent_id = d.id OR c.child_id = d.id) as x
union
select * from device_group_v2 where id in (input_parents_id)
$$ language sql;
这失败了:
[42883] 错误:运算符不存在:uuid = uuid[] 没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。职位:290
我究竟做错了什么?那里需要一种类型转换吗?
IN 运算符仅适用于“列表”或“集合”,不适用于数组。您需要使用
ANY
运算符:调用函数时,您应该将适当的变量类型转换为
uuid[]
,或使用uuid[]
类型变量。检查下面;
传递 uuid[] 类型变量
将 varchar 类型转换为 uuid[]