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

PostgreSQL中如何传递数组查询user_id是否存在于数组内

修正PostgreSQL UUID数组查询的方法

错误原因分析

  • 使用SELECT * FROM user_accounts WHERE user_id IN $1报错:PostgreSQL的IN操作符要求传入逗号分隔的值列表,而非数组参数,直接绑定数组参数不符合语法要求。
  • 使用SELECT * FROM user_accounts WHERE user_id = ANY(ARRAY["328hdgyas78g2", "3adhdayas7453"])报错:PostgreSQL中双引号用于引用列名/表名等标识符,这里的ID被识别为列名,自然不存在,字符串值需用单引号包裹。

正确写法

1. 直接编写SQL语句的场景

将数组中的UUID用单引号包裹,同时显式指定数组类型为UUID[],确保类型匹配:

SELECT * FROM user_accounts WHERE user_id = ANY(ARRAY['328hdgyas78g2', '3adhdayas7453']::UUID[]);

也可以用IN展开列表的写法:

SELECT * FROM user_accounts WHERE user_id IN ('328hdgyas78g2', '3adhdayas7453');

2. 前端传数组参数的生产场景(推荐,防SQL注入)

通过应用程序的参数绑定功能传递数组,避免直接拼接SQL,同时指定数组类型:

Node.js + pg库示例
const userIds = ["328hdgyas78g2", "3adhdayas7453"];
const query = {
  text: 'SELECT * FROM user_accounts WHERE user_id = ANY($1::UUID[])',
  values: [userIds]
};
// 执行查询逻辑
Python + psycopg2示例
user_ids = ["328hdgyas78g2", "3adhdayas7453"]
cursor.execute('SELECT * FROM user_accounts WHERE user_id = ANY(%s::UUID[])', (user_ids,))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:24:10