如何用PostgREST筛选JSONB列数组含指定值且排除特定值的PostgreSQL记录
解决PostgREST筛选JSONB数组的问题
错误原因
你用column->>baz会把JSON数组转换成文本类型,而PostgREST的cs.(包含任意元素)操作符需要数组类型,类型不匹配才触发了报错。
正确请求URL
要筛选baz数组包含a=1或b=5且不包含c=1的记录,需保留JSON数组类型,使用以下请求:
/table?select=id&column->baz=cs.["a=1","b=5"]&column->baz=not.cs.["c=1"]
关键说明
column->baz:获取JSONB列里的baz数组,保持JSON数组类型,确保PostgREST能正确识别并使用数组操作符。cs.["a=1","b=5"]:表示数组包含a=1或b=5中的任意一个(cs是contains any的缩写)。not.cs.["c=1"]:表示数组不包含c=1这个元素。
备选写法(基于JSON包含)
也可以用JSON对象匹配的方式,逻辑等价但写法更直观:
/table?select=id&column@>'{"baz": ["a=1"]}'&or=column@>'{"baz": ["b=5"]}'¬.column@>'{"baz": ["c=1"]}'
内容的提问来源于stack exchange,提问作者bugmenot123
相关产品推荐
相关产品推荐

