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

