我可以在数据库服务器上复制 Postgresql 大对象吗?

问题描述 投票:0回答:3

我在一个大对象中有数据,现在我想复制它,这样我就可以在保留原始副本的同时附加到它。 是否有任何 JDBC 调用或 SQL 语句可以用来导致这种情况发生?

从我找到的每一个资源中,似乎我必须将所有数据实际读取到我的客户端并再次写出才能获取副本。 我更愿意节省往返路程。

postgresql jdbc oid
3个回答
4
投票

如果您知道大型对象,则可以通过两个查询来复制/克隆它oid

INSERT INTO pg_largeobject_metadata (lomowner, lomacl) SELECT lomowner, lomacl FROM pg_largeobject_metadata WHERE oid = <my_old_oid> RETURNING oid AS my_new_oid; INSERT INTO pg_largeobject (loid, pageno, data) SELECT <my_new_oid>, pageno, data FROM pg_largeobject WHERE loid = <my_old_oid>;

my_old_oid

 是大物体的已知 oid

my_new_oid
是第一个insert语句返回的oid

pg_large_object 参考
对象类型标识符(oid)参考



0
投票
自 9.4 起可用:使用

lo_from_bytealo_get:

SELECT lo_from_bytea(0, lo_get(<the large object you want to clone>));
这会将创建的大对象的所有者设置为当前用户,因此您

可能必须随后更改大对象的所有者:

ALTER LARGE OBJECT <returned oid of the newly created lo> OWNER TO <username>;
参考:

https://www.postgresql.org/docs/14/lo-funcs.html

https://www.postgresql.org/docs/14/sql-alterlargeobject.html

© www.soinside.com 2019 - 2024. All rights reserved.