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

如何编写PostgreSQL JSONB字段的IN查询及自定义查询函数?

错误原因

你原有函数执行失败的核心问题是直接用IN操作符比较JSONB类型的node_ids字段和文本数组参数,IN操作符不支持JSONB数组与普通文本数组的交集判断,需要用PostgreSQL专门的JSONB操作符。

符合需求的单条查询语句

针对你的需求(匹配node_ids包含传入列表中任意元素的记录),直接使用JSONB的?|操作符即可,该操作符的作用就是判断JSONB数组是否包含给定文本数组中的任意一个元素:

SELECT location_id::text
FROM node_mapping
WHERE node_ids ?| ARRAY['uuid100', 'uuid200', 'uuid300'];

拿你给出的示例数据测试,上述语句会返回UUID1,符合预期。

修正后的存储函数
CREATE OR REPLACE FUNCTION find_location_ids_for_seller(_seller_id text[])
   RETURNS TABLE(location_id text)
   LANGUAGE plpgsql AS
$func$
BEGIN
   RETURN QUERY
   SELECT n.location_id::text
   FROM   node_mapping n
   WHERE  n.node_ids ?| _seller_id;
END
$func$;
函数调用示例
-- 传入需要匹配的字符串列表参数
SELECT * FROM find_location_ids_for_seller(ARRAY['uuid100', 'uuid200', 'uuid300']);
性能优化提示

如果表数据量较大,建议为node_ids字段创建GIN索引,可大幅提升该类查询的性能:

CREATE INDEX idx_node_mapping_node_ids ON node_mapping USING GIN(node_ids);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:06:03