当一个人想用一个新的大对象替换一个大对象时应该怎么做。一个例子是用新版本更新上传的文件。
一种方法大概是创建一个新的大对象,更新指向新 oid 的链接,然后取消链接旧对象。但是替代现有数据是否合理,比如说,通过覆盖原始数据(可能首先截断内容)?
FWIW 我会在 JDBC 和 PostgreSQL 9.4 中这样做。
当一个人想用一个新的大对象替换一个大对象时应该怎么做。一个例子是用新版本更新上传的文件。
一种方法大概是创建一个新的大对象,更新指向新 oid 的链接,然后取消链接旧对象。但是替代现有数据是否合理,比如说,通过覆盖原始数据(可能首先截断内容)?
FWIW 我会在 JDBC 和 PostgreSQL 9.4 中这样做。
大对象 API 背后的想法是模仿类似文件的 API。
lo_open
OID好比文件的路径, or得到的文件描述符lo_creat
相当于文件的POSIXopen()
和creat()
系统调用。JDBC 提供
LargeObject.truncate()
了 libpq(在 C 中)和服务器都具有内置lo_truncate()
功能。所以是的,用截断替换 LO 内容(保持相同的 OID)是有意义的,然后是
lo_write
libpq,或者lowrite
如果是服务器端代码,或者LargeObject.write()
如果使用专用的 JDBC 类,就像您可以对文件系统上的文件所做的那样。用新的 OID 创建一个新的 LO,然后取消旧的链接,它也可以工作,只是不够优雅,而且它无缘无故地使用了一个新的 OID。