5

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

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

4

2 回答 2

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是第一个插入语句返回的 oid

pg_large_object 引用
对象类型标识符 (oid) 引用

于 2015-05-06T15:40:45.470 回答
1

看看服务器端的 lo_import 和 lo_export函数。您将不得不将数据从数据库移动到文件系统并再次返回,但至少它是服务器的文件系统,而不是客户端的文件系统。

于 2011-03-01T17:26:50.480 回答