bel*_*daz 4 postgresql jdbc blob
当人们希望用一个新的大对象替换一个大对象时应该怎么做。一个示例是使用新版本更新上传的文件。
一种方法大概是创建一个新的大对象,更新到新 oid 的链接,然后取消旧对象的链接。但是替换现有数据是否合理,例如,通过覆盖原始数据(可能首先截断内容)?
FWIW 我会在 JDBC 和 PostgreSQL 9.4 中这样做。
大对象 API 背后的想法是模仿类似文件的 API。OID就像文件的路径,lo_openor获取的文件描述符lo_creat 相当于POSIXopen()和creat()文件的系统调用。
JDBC 提供LargeObject.truncate()并且 libpq(在 C 中)和服务器都有内置lo_truncate()函数。
因此,是的,通过截断后跟lo_writeif libpq,或者lowrite如果服务器端代码,或者LargeObject.write()如果使用专用 JDBC 类来替换 LO 内容(保持相同的 OID)是有意义的,就像您可以在文件系统上处理文件一样。
用新的 OID 创建一个新的 LO 然后取消旧的 LO 也可以工作,它只是不那么优雅并且它无缘无故地消耗了一个新的 OID。
| 归档时间: |
|
| 查看次数: |
702 次 |
| 最近记录: |