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

PostgreSQL如何返回jsonb列的二进制/分解格式而非编码文本?

PostgreSQL jsonb列二进制格式获取问题解答

差异原因

你遇到的字节数差异,本质是存储格式与传输格式的区别:

  • pg_column_size("jsonb_column") 返回的是jsonb在PostgreSQL内部的二进制分解格式大小,这是经过压缩优化的存储结构,体积远小于文本格式。
  • 应用程序默认拿到的是jsonb被序列化为JSON文本格式后的字节流,这是因为客户端驱动通常会自动将二进制格式转换为可读的文本JSON,导致体积膨胀。

核心结论

PostgreSQL完全支持直接返回jsonb列的二进制分解格式,无需转成文本。

获取二进制格式的方法

1. 客户端启用二进制传输模式

大部分数据库驱动支持配置二进制结果集传输,只需在连接时开启对应选项:

  • Java JDBC:设置 prepareThreshold=0 并启用二进制传输参数
  • Python psycopg2:连接时指定 binary=True
  • Node.js pg:配置 binary: true

开启后执行常规查询:

SELECT "jsonb_column" FROM "Table";

此时获取到的就是jsonb的原生二进制字节流,大小与pg_column_size()返回值一致。

2. 二进制导出数据(备份场景)

如果是导出数据,可使用pg_dump的二进制格式:

pg_dump -Fc -t "Table" your_database > dump_file.dump

导出的文件会保留jsonb的原生二进制结构,体积与存储大小匹配。

注意事项

  • 直接处理二进制格式需要应用程序自行解析PostgreSQL的jsonb二进制结构,复杂度高于文本JSON,仅在对性能或存储空间有极高要求时使用。
  • 并非所有客户端驱动都支持二进制格式,需提前查阅驱动文档确认。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:47:01