我有一个大对象中的数据,现在我想复制它,以便在保留原始副本的同时附加到它。我可以使用任何 JDBC 调用或 SQL 语句来导致这种情况发生吗?
从我找到的每一个资源中,似乎我实际上必须将所有数据读取给我的客户并再次将其写出以获取副本。我更愿意节省往返行程。
我有一个大对象中的数据,现在我想复制它,以便在保留原始副本的同时附加到它。我可以使用任何 JDBC 调用或 SQL 语句来导致这种情况发生吗?
从我找到的每一个资源中,似乎我实际上必须将所有数据读取给我的客户并再次将其写出以获取副本。我更愿意节省往返行程。
如果您知道一个大对象,则可以使用两个查询来复制/克隆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
是第一个插入语句返回的 oid
看看服务器端的 lo_import 和 lo_export函数。您将不得不将数据从数据库移动到文件系统并再次返回,但至少它是服务器的文件系统,而不是客户端的文件系统。