You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用IN/ANY运算符对比UUID与UUID数组时Pgadmin报错求助

问题原因及解决办法

错误提示说明当前执行的预编译语句期望单个uuid类型参数,但你传递的是uuid[]数组——大概率是之前创建的同名预编译语句没有被正确覆盖,残留了旧的参数定义。

解决步骤:

  1. 先清理旧的预编译语句:
DEALLOCATE testquery;
  1. 重新创建预编译语句(推荐用ANY的写法,比UNNEST更简洁高效):
PREPARE testquery (UUID[]) AS
SELECT 
    ven.initialization_status, 
    ven.is_degraded, 
    s.hostname, 
    s.operational_status 
FROM virtual_edge_node ven 
LEFT JOIN virtual_edge_node_reported_status s ON ven.id = s.virtual_edge_node_id 
LEFT JOIN virtual_edge_group veg ON ven.ve_group_id = veg.id 
WHERE ($1 IS NULL OR ven.site_id = ANY($1) OR (ven.is_inherited_site = true AND veg.site_id = ANY($1)));
  1. 执行查询,注意不要加多余引号,直接传递数组:
EXECUTE testquery(ARRAY['4de9127e-8178-46b3-b26f-3d61cdc9b28c','4de9127e-8178-46b3-b26f-3d61cdc9b28d']::UUID[]);

或者用另一种数组写法,效果一致:

EXECUTE testquery('{"4de9127e-8178-46b3-b26f-3d61cdc9b28c","4de9127e-8178-46b3-b26f-3d61cdc9b28d"}'::uuid[]);

额外说明:

  • ANY($1)直接作用于数组的写法比IN (SELECT UNNEST($1))更高效,PostgreSQL对前者的查询计划优化更好。
  • 确保ven.site_id和veg.site_id字段确实是uuid类型,避免因字段类型不匹配导致隐性转换错误。

内容的提问来源于stack exchange,提问作者NeilB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:32:05