使用supabase-js筛选文本数组列无结果,SQL查询正常求排查
问题原因与解决方案
错误原因
直接传递JS数组["123456"]给.contains()方法时,supabase-js会将其序列化为JSON数组,但你的phone_numbers字段是PostgreSQL的text[]原生数组类型,两者格式不匹配,导致筛选条件不生效。而手动编写的SQL用array['123456']是PostgreSQL原生数组格式,因此能正确匹配。
修正方案
使用supabase-js提供的postgres.array()工具,将JS数组转换为PostgreSQL原生数组格式后传入.contains()方法:
- 先导入
postgres工具(未导入的话):
import { postgres } from '@supabase/supabase-js'
- 修改查询代码:
const { data, error } = await supabaseClient .from('profiles') .select('*') .contains('phone_numbers', postgres.array(["123456"]))
替代方案
如果不想额外导入工具,也可以直接用.sql()方法编写原生筛选条件:
const { data, error } = await supabaseClient .from('profiles') .select('*') .sql`phone_numbers @> array['123456']`
内容的提问来源于stack exchange,提问作者Björn
相关产品推荐
相关产品推荐

