2012-12-07 69 views
10

我正在編寫一個程序來同步PostgreSQL和MS SQL服務器數據庫(並在此轉換中添加一些更改)。數百萬條記錄需要很長時間,並且使用select *加載服務器非常糟糕;它也需要更多的資源來解析不變的記錄並根據MS SQL服務器進行驗證。PostgreSQL如何在最後n分鐘內找到任何更改

PostgreSQL中是否有任何日誌可以解析以找出最近n分鐘發生的更改?這將允許我只選擇那些我需要工作的記錄;提高性能。

+1

你有沒有考慮[xmin](http://dba.stackexchange.com/a/5173/1396)? – 2012-12-07 17:59:30

+0

如何使用'xmin'從表格中獲取已更改的記錄(如果表格有100萬條記錄?) – Andrew

+0

http://www.sqlfiddle.com/#!1/58507/2 – 2012-12-07 18:34:19

回答

15

PostgreSQL中,發現在最後n分鐘改變:

PostgreSQL並不自動存儲刪除的行添加/更新時間/(它會很慢下來PostgreSQL的處理時間戳這樣,如果你不希望它)。

您必須自己動手:將時間戳列添加到表中。在表中插入一行時,請將時間戳列更新爲current_timestamp。當你選擇行,使用過濾下來其中timestamp大於N分鐘前如下select語句:

獲取行,其中的時間戳比日期更大:

SELECT * from yourtable 
WHERE your_timestamp_field > to_date('05 Dec 2000', 'DD Mon YYYY'); 

獲取已在最後N分鐘被改變行:

SELECT * from yourtable 
WHERE your_timestamp_field > current_timestamp - interval '5 minutes' 
+0

好的,插入可以用時間戳來處理,那麼編輯呢? – Andrew

+1

編輯表格時,可以更新同一時間戳,也可以創建一個名爲「date_updated」的附加列,並在更新行時將該列標記爲當前時間。隨時關注時區更改,夏令時和其他惡作劇。 –

相關問題