2015-12-09 63 views
2

我們有一個要求,即我們應該有一個在我們系統中的所有項目的副本。最簡單的解釋方法是複製,但忽略刪除語句(INSERT和UPDATE都可以) 這可能嗎?或者更好的問題是解決這類問題的最佳方法是什麼?沒有DELETE語句的Postgresql複製

回答

1

製作當前數據庫的副本/副本,並通過dblink從當前數據庫到副本使用觸發器。在插入之後和更新之後使用觸發器來插入和更新副本中的數據。

因此,無論何時在當前數據庫中發生行插入/更新,它都會直接反映到副本。

0

我不知道,我完全理解這個問題,但我會盡力幫助:

  • 首先(相對於@Sunit) - 我建議避免觸發。觸發器引入額外的開銷並影響性能。
  • 我將使用的解決方案(我實際上在我的幾個項目中使用了相似的需求) - 根本不使用DELETE。相反,您可以添加名爲「已刪除」的位(布爾值)列,將其默認值設置爲0(false),而不是刪除將該字段更新爲1(true)的行。您還需要更改其他查詢(SELECT)以包含「WHERE Deleted = 0」之類的內容。
  • 另一個選擇是像往常一樣繼續使用DELETE,並允許從主數據庫和副本數據庫中刪除記錄,但配置WAL歸檔並將WAL歸檔文件存儲在某個共享目錄中。這將允許您進行即時恢復,這意味着您可以隨時(即在刪除之前)將其他PostgreSQL實例恢復到羣集狀態。通過這種方式,您將獲得一條已刪除的記錄,但是到達記錄的過程非常複雜。取決於將來檢查刪除的記錄的頻率(也許它們根本沒有被檢查,但只是保存用於即時跟蹤),這種方法也有幫助。