PostgreSQL 和 BLOBs

发布者    |       Hibernate ORM

在处理一个报告的问题时,我不得不再次深入研究 PostgreSQL BLOB 的 支持。因此,为了记录历史和为了我的瑞士奶酪记忆,我决定在此记录我的发现。

我找到的关于这个主题的最好资源是 https://jdbc.postgresql.ac.cn/documentation/84/binary-data.html。无论如何,它从一开始就设定了正确的基调

PostgreSQL™ 提供了两种不同的方式来存储二进制数据。

每种方式都使用不同的专用数据类型,oidbytea

要使用 bytea 数据类型,您应简单地使用 getBytes()、setBytes()、getBinaryStream() 或 setBinaryStream() 方法。要使用大型对象功能,您可以使用 PostgreSQL™ JDBC 驱动程序提供的 LargeObject 类,或者使用 getBLOB() 和 setBLOB() 方法。

遗憾的是,并没有努力使这变得对开发者透明。因此,到目前为止,底线是,为了使用 Hibernate 和 PostgreSQL 一起存储大型二进制数据,您的最佳选择是

  1. 使用一致的样式来定义列数据类型(即选择 bytea 或 oid 并始终使用它)
  2. 根据您选择的方式适当地设置 hibernate.jdbc.use_streams_for_binary(对于 oid 为 false,对于 bytea 为 true)

否则,您需要为您最常用的样式设置 hibernate.jdbc.use_streams_for_binary,并按属性逐个处理偏差 :(


返回顶部