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
相关产品推荐
相关产品推荐

