2011-03-01 30 views
4

我在一個大對象中獲取數據,現在我想製作一份它的副本,以便在保留原始副本的同時追加它。是否有任何JDBC調用或SQL語句可用於導致這種情況發生?我可以在數據庫服務器上覆制Postgresql大對象嗎?

從我發現的每一個資源來看,似乎我必須實際讀取所有數據到我的客戶端,並再次寫出來獲取副本。我更願意保存往返旅程。

回答

1

看看server-side lo_import and lo_export的功能。您將不得不將數據從數據庫移到文件系統,然後再返回,但至少它是服務器的文件系統,而不是客戶端。

3

如果您知道它的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由第一插入語句

pg_large_object reference
Object Type Identifier (oid) reference

返回的OID
相關問題