我有两个主机服务器s1和s2。在这两个服务器中,我都有一个名为n1
的模式。现在,我对s1的模式n1
中的一些表进行了一些更改。我希望对服务器s2的模式n1
进行相同的更改。我计划做的是使用pg_dump
对服务器s1的模式n1进行备份,并使用pg_restore
在服务器s2中进行恢复。
对于备份和恢复,使用以下命令:
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
);
你可以这样转储:
pg_dump -Fc -h XXXXX -U user --inserts --on-conflict-do-nothing --data-only -n n1 dbname > test.dump
恢复这样的转储将跳过与现有行具有主键或唯一约束冲突的行。选项--on-conflict-do-nothing
可从上的v12获得