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

PostgreSQL存储过程传可变UUID数组报错:uuid与text类型不匹配

问题原因

错误“operator does not exist: uuid = text”的核心是调用存储过程时,传入的UUID字符串被当作text类型,即便参数声明为variadic uuid[],PostgreSQL也不会自动将单个text值隐式转换为uuid并包装成数组,导致数组元素类型为text,与user_project表中uuid类型的project_id列比较时出现类型不匹配。

解决方法

方法1:调用时显式转换参数类型

调用存储过程时,将传入的UUID字符串显式转换为uuid类型,PostgreSQL会自动将其包装为uuid[]数组(因参数是variadic):

call deleting_projects_with_exemptions('4b589296-b5a3-48ab-94c4-f85624cd8e14'::uuid);

若需传入多个UUID,直接追加即可,无需手动构造数组:

call deleting_projects_with_exemptions(
    '4b589296-b5a3-48ab-94c4-f85624cd8e14'::uuid,
    'your-second-uuid-here'::uuid
);

方法2:修改存储过程兼容text输入(可选)

如果希望调用时无需显式转换,可将参数改为variadic text[],在存储过程内部转换为uuid[]后再进行比较:

create or replace procedure deleting_projects_with_exemptions(
    variadic project_ids text[]
)
language plpgsql
as $$
begin
    delete from user_project 
    where not (project_id = any (project_ids::uuid[]));
end;
$$;

此时调用可直接传字符串:

call deleting_projects_with_exemptions('4b589296-b5a3-48ab-94c4-f85624cd8e14');
验证说明

两种方法均可解决类型不匹配问题,优先推荐方法1,它能保持参数类型的严谨性,避免潜在的类型转换错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:04:57