2016-11-09 118 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

相关问题