簡體   English   中英

歸檔postgres數據庫的最佳方法是什么?

[英]What is the best way to archive a postgres database?

詳細信息如下:

必須對數據庫進行存檔,以便可以將6個月以上的記錄復制到新數據庫中,並從主(生產)數據庫中刪除。 這里的復雜性將是復制彼此引用的所有表中的所有行。 之后,將從某些表中復制的這些行(這些表確實很大,不再需要其數據)將被刪除。

postgres數據庫是Amazon RDS實例。

實現此目標的最佳方法是什么?

我在想一個Springboot應用程序

要么

讓postgresql.conf調用shell腳本,該腳本調用sql批處理。 對於第二種方法,我不確定如何編輯Amazon RDS postgresql.conf文件以及在何處指定Shell腳本。 sql批處理將寫在哪里? 這對我來說有點新,不勝感激。

如果您在服務器端進行所有操作而不是使用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命令行工具在服務器端調用所有這些命令,並最后將導入的文件移動到一個永久位置,以防萬一出現問題並需要再次處理它們。

請參閱將PostgreSQL的PL / pgSQL輸出保存到CSV文件如何將CSV文件數據導入到PostgreSQL表中?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM