2016-11-09 14 views
0

詳細はこちらpostgresデータベースをアーカイブする最良の方法は何ですか?

データベースは、6か月以上経過したレコードを新しいデータベースにコピーし、メイン(本番)データベースから削除できるようにアーカイブする必要があります。ここでの複雑さは、互いに参照を持つすべてのテーブルのすべての行をコピーすることです。その後、テーブルのコピーされた行(実際には巨大でデータは必要ない)が削除されます。

postgresデータベースはAmazon RDSインスタンスです。

これを達成する最も良い方法は何ですか?

私はSpringbootアプリケーション

OR

のどちらかが、SQLバッチを起動するシェルスクリプトを呼び出すpostgresql.confの持って考えていました。 2番目のアプローチでは、amazon RDS postgresql.confファイルを編集する方法とシェルスクリプトを指定する場所がわかりません。 SQLバッチはどこに書かれますか?これは私に少し新しく、任意のポインターを感謝します。

答えて

0

Springbootアプリケーションを使用するのではなく、すべてのサーバー側で行う方がはるかに高速です。問題はダンプ/リストアではなく、pg_dumpユーティリティやpsql -d dbname -t -A -F ";" -c "SELECT * FROM yourdata where cutdate < = current_timestamp-interval '6 months'"> output.csv

しかし、エクスポートされたものすべてが2番目のデータベースにロードされ、何も削除しないことを保証する必要があります輸出されていない

まず、プライマリキーのサブセットを一時テーブルに選択します。すべてのエクスポートファイルがバックアップデータベースに続いて

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

を生成した後に続いて

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

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

事前に選択されたキー(およびそのすべての依存関係)をエクスポートするために、サーバー側のCOPYコマンドを使用します

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

または、私が編集できるpostgresql.conf(amazon rdsインスタンスで利用可能)にdbパラメータがあります - これはこれを行うスクリプトにアクセスできますか? – Tisha

関連する問題