2016-11-09 154 views
0

以下是詳細信息:什麼是歸檔postgres數據庫的最佳方式?

數據庫必須存檔,以便早於6個月的記錄可以複製到新數據庫並從主(生產)數據庫中刪除。這裏的複雜性是複製所有相互引用的表中的所有行。之後,從一些表中複製的行(這些表非常龐大,不再需要其數據)將被刪除。

postgres數據庫是Amazon RDS實例。

達到此目的的最佳方法是什麼?

我想無論是Springboot應用

OR

有postgresql.conf中調用一個shell腳本調用SQL批處理。 對於第二種方法,我不確定如何編輯amazon RDS postgresql.conf文件以及在何處指定shell腳本。 sql批處理會寫在哪裏?這對我來說有點新鮮,欣賞任何指針。

回答

0

如果你做所有服務器端而不是使用Springboot應用程序,它將會更快。問題不在於您可以使用pg_dump實用程序或psql -d dbname -t -A -F輕鬆執行轉儲/恢復操作「;」 -c「SELECT * FROM yourdata WHERE cutdate < = current_timestamp-interval'6 months'」> output.csv

但是,您必須保證導出的所有內容都已加載到第二個數據庫中,並且不會刪除任何內容尚未導出。

我會首先選擇一個主鍵的子集到臨時表中。然後使用服務器端COPY命令導出預選鍵(和它的依賴性)

COPY (SELECT d.* FROM yourdata d INNER JOIN temporal t WHERE d.pk=t.pk) To '/tmp/yourdata.csv' WITH CSV DELIMITER ','; 

所有導出文件已備份數據庫生成

DELETE FROM yourdata WHERE pk IN (SELECT pk FROM temporal) 

後然後做

COPY yourdata(column1,column2,column3) FROM '/tmp/yourdata.csv' DELIMITER ',' CSV 

您可以使用psql命令行工具編寫一個在服務器端調用所有命令的腳本,並最後將導入的文件移動到永久位置以防萬一錯了,你需要再次處理它們。

Save PL/pgSQL output from PostgreSQL to a CSV fileHow to import CSV file data into a PostgreSQL table?

+0

我可以使用的recovery.conf這個? – Tisha

+0

或者在postgressql.conf中有一個db參數(可在amazon rds實例中使用),我可以編輯它 - 可以訪問這個腳本嗎? – Tisha

相關問題