我目前正在尝试通过JDBC优化Postgres中的数据加载。 我们正在使用COPY FROM STDIN和FORMAT' binary' 现在构建二进制字节数组对于字符串,long,uuid等非常简单。但是在一个实例中我们在表中有一个JSONB字段,我不知道如何将我的json对象序列化为二进制jsonb格式。 jsonb在任何地方都有规格吗?
注意:我已经排除了发送一个utf-8二进制序列化json字符串。
答案 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 */