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

Postgres:如何查询BYTEA[]类型字段包含指定值的行?

问题分析及解决方案

问题原因

  1. 十六进制字符串不匹配:你SQL中使用decode的十六进制字符串末尾多了一个b,而目标行中对应的实际值是2616138d49327dbfe7e10498e6237d56195bff4a1d9293b03e5c875fd83a2c8(去掉DBeaver显示的x前缀后),长度和内容不一致导致匹配失败。
  2. DBeaver显示前缀处理:DBeaver中显示的x是十六进制数据的标识,实际存储的是x后面的十六进制字符串对应的二进制数据,不需要保留该前缀进行转换。

正确查询语句

方法1:使用数组重叠运算符&&

SELECT *  
FROM transaction 
WHERE legacy_message.account_keys && ARRAY['\x2616138d49327dbfe7e10498e6237d56195bff4a1d9293b03e5c875fd83a2c8'::bytea];

方法2:使用= ANY()直接检查元素存在性

这种写法更直观,适合单元素匹配场景:

SELECT *  
FROM transaction 
WHERE '\x2616138d49327dbfe7e10498e6237d56195bff4a1d9293b03e5c875fd83a2c8'::bytea = ANY(legacy_message.account_keys);

补充说明

  • 可以直接用\x前缀加十六进制字符串的方式构造bytea值,比decode更简洁且不易出错。
  • 确保传入的十六进制字符串和目标行中存储的完全一致(注意末尾的字符差异),这是匹配成功的关键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:42:36