postgresql从生产到测试服务器的合并转储;仅添加新记录

问题描述 投票:2回答:1

我想将生产中的转储合并到测试服务器数据库,以测试一些东西,直到现在我总是删除当前数据库,并从转储中恢复所有内容,但是问题是数据库每次执行此操作的容量都很大(数据库中的〜90gb ,以及〜25gb作为sql文件)

数据库有〜50个表,我想更新所有表,其中数据已更新或有新数据

im使用postgres 9.5,我用于转储的命令是

PGPASSWORD="mypassword" pg_dump -U $user -h $host -d $dbname | gzip > $dest_dir/postgres_backup_$DATE.gz

并且要还原,我可以使用其中一个

cat postgres_file | sudo -u postgres psql $dbname 
#or 
gunzip -c postgres.gz | pg_restore -U $user -h $host -d $dbname

但是当我在不删除当前数据库的情况下使用它们时,会出现错误,因为方案和关系已经存在,并且会出现类似的错误

ERROR:  duplicate key value violates unique constraint
DETAIL:  Key (mykey)=(some_integer_value) already exists.
ERROR:  multiple primary keys for table "table_name" are not allowed
ERROR:  relation "some_relation" already exists

并且它不会更新数据库

我开始阅读有关规则的信息,但是我缺乏SQL知识来制定可以执行我想要的规则的规则,或者是否有其他方法可以做到这一点?

sql database postgresql
1个回答
0
投票
没有办法选择性地仅转储新行,因为PostgreSQL无法知道哪些是新行。

但是您可以避免在还原时删除所有数据。为此,请升级到PostgreSQL v12或更高版本,并使用带有--on-conflict-do-nothing--rows-per-insert=100选项的pg_dump。然后,将跳过目标位置已存在的所有行。

无论如何您都应该升级,今年9.5将不再支持。

© www.soinside.com 2019 - 2024. All rights reserved.