首页 > 解决方案 > 使用 pg_restore 作为增量数据恢复 PostgreSQL 数据库,而不覆盖或删除现有表

问题描述

我有两个主机服务器 s1 和 s2。在这两个服务器中,我都有一个名为n1. n1现在,我对 s1架构中存在的一些表进行了一些更改。n1我希望对服务器 s2的架构进行相同的更改。我打算做的是使用备份服务器 s1 的架构 n1pg_dump并使用pg_restore.

对于备份和恢复,使用了这些命令:

pg_dump -Fc -h XXXXX -U user -d dbname > test.dump

pg_restore  -h XXXXX -U user -d dbname < test.dump

但是当我恢复使用时pg_restore,我得到了这个错误:

pg_restore: while PROCESSING TOC:
pg_restore: from TOC entry 200; 1259 16435 TABLE table_name database_name
pg_restore: error: could not execute query: ERROR:  relation "address" already exists
Command was: CREATE TABLE public.table_name (
    id integer NOT NULL,
    status character varying(1) NOT NULL,
   table_name1 character varying(80) NOT NULL,
   table_name2 character varying(80),
   table_name3 character varying(80),
    location_id integer NOT NULL
);

标签: postgresqlrestorepg-dumppg-restore

解决方案


你可以这样转储:

pg_dump -Fc -h XXXXX -U user --inserts --on-conflict-do-nothing --data-only -n n1 dbname > test.dump

恢复这样的转储将跳过与已经存在的行有主键或唯一约束冲突的行。该选项--on-conflict-do-nothing从 v12 开始可用。


推荐阅读