Postgres JSONB规范复制二进制格式

时间:2016-02-24 10:52:39

标签: postgresql jsonb

我目前正在尝试通过JDBC优化Postgres中的数据加载。 我们正在使用COPY FROM STDIN和FORMAT' binary' 现在构建二进制字节数组对于字符串,long,uuid等非常简单。但是在一个实例中我们在表中有一个JSONB字段,我不知道如何将我的json对象序列化为二进制jsonb格式。 jsonb在任何地方都有规格吗?

注意:我已经排除了发送一个utf-8二进制序列化json字符串。

1 个答案:

答案 0 :(得分:1)

您只需要将json对象视为普通字符串,但在版本号之前添加1(字节),这是它们当前支持的唯一版本。确保你指定字段的长度是" string.length" + 1(版本号)

所以,基本上,如果j是你的json而dos是输出流:

val utfBytes = j.toString.getBytes("UTF8")
dos.writeInt(utfBytes.length + 1)
dos.write(Array(1.toByte))
dos.write(utfBytes)

这是来自postgres源代码的评论

 /*
  104  * jsonb type recv function
  105  *
  106  * The type is sent as text in binary mode, so this is almost the same
  107  * as the input function, but it's prefixed with a version number so we
  108  * can change the binary format sent in future if necessary. For now,
  109  * only version 1 is supported.
  110  */