2013-06-18 110 views
0

我們擁有一個包含數百個表的大型PostgreSQL轉儲,可以使用pg_restore成功導入。我們正在開發一個插入很多這些表(〜100)的軟件,並且對於每次運行,我們都需要將這些表返回到其原始狀態(這意味着轉儲中的內容)。再次恢復原始轉儲需要很多時間,我們不能等待每個調試會話前半小時。所以我需要一種相對較快的方式將這些表格恢復爲從轉儲中恢復後的狀態。PostgreSQL將表重置爲原始狀態

我試過用-L開關使用pg_restore並選擇這些表,但當使用-data-only和-clean或者「不能刪除表X因爲其他對象依賴於它「錯誤時只使用 - 清潔。在pg_restore沒有工作之前發出一個SET CONSTRAINTS ALL DEFERRED命令。也許我有表列表中的行都錯了,現在它

491; 1259 39623998 TABLE public some_table some_user 
8021; 0 0 COMMENT public TABLE some_table some_user 
8022; 0 0 ACL public some_table some_user 

每一個表,然後

6700; 0 39624062 TABLE DATA public some_table postgres 
8419; 0 0 SEQUENCE SET public some_table_pk_id_seq some_user 

每個表。

我們只插入數據並且不更新現有行,因此刪除索引上方的所有行並重置序列可能會奏效,但我真的不想爲所有的一百張表手動創建這些命令,而我即使我根據給定的行設置級聯刪除其他對象,我甚至不確定它會工作。

有沒有人有任何更好的想法如何處理?

回答

0

所以你正在尋找像快照東西,以便能夠迅速恢復到某個狀態。

我不知道在PostgreSql中回滾到某個時間戳的可能性。

在尋找解決的辦法,我發現兩個想法here

  • 使用create databasetemplate選項
  • 虛擬化使用VMware或VirtualBox的你的PostgreSQL安裝,並使用虛擬機的快照功能。

同樣,這兩個想法都從上面的源複製(我有搜索「postgresql數據庫快照」)。

+0

謝謝,模板解決方案的創建數據庫將其降低到大約兩分鐘,這是可以接受的。我會繼續嘗試,因爲我們需要重做的表的大小很小,所以選擇性的下降和創建可能會更快。如果我找到更好的方法,我會發布它。 –

相關問題