postgresql - 使用 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
);
解决方案
你可以这样转储:
pg_dump -Fc -h XXXXX -U user --inserts --on-conflict-do-nothing --data-only -n n1 dbname > test.dump
恢复这样的转储将跳过与已经存在的行有主键或唯一约束冲突的行。该选项--on-conflict-do-nothing
从 v12 开始可用。
推荐阅读
- artificial-intelligence - 可接受的标签可以包含 Undec(Undecided) 参数吗?
- python - 如何获取特定字符串并返回他的 css 背景颜色
- azure - Azure 虚拟机 Web 服务器“响应时间过长”错误
- javascript - 在 sendgrid 电子邮件中将 javascript 变量添加到 url
- python-3.x - 在串行通信中发送变量的内容
- ffmpeg - ffmpeg 库 - 为什么比特率参数在编码时会发生变化,以及如何强制保留它?
- ios - 即使使用 API 密钥,Fastlane 上传到 App Store 也会在非交互模式下失败
- python - 3D 图形错误:“具有多个元素的数组的真值不明确”
- laravel - 如何在 laravel 8 中从 ftp 磁盘中删除文件
- flutter - 运行颤振应用程序“com.android.builder.dexing.DexArchiveMergerException”时出错