pg_restore 会覆盖现有表格吗?

will pg_restore overwrite the existing tables?

假设我有两个主机服务器 s1 和 s2。在这两个服务器中,我都有一个名为 n1 的模式,现在我对 s1 的模式 n1 中存在的一些表进行了一些更改。我想对服务器 s2 的模式 n1 进行相同的更改。我打算做的是使用 pg_dump 备份服务器 s1 的模式 n1,并使用 pg_restore 在服务器 s2 中恢复。现在我的问题是,因为服务器 s2 中已经有相同的模式 n1 和相同的表集。恢复过程会做什么?它会覆盖现有表还是我应该删除服务器 s2 的现有模式并使用服务器 s1 的转储恢复它?

如果您使用 pg_restore--clean 选项,旧的 table 将在创建新的之前被删除。

如果您不使用 --clean 选项,您将收到一条错误消息,指出 table 已经存在,但 pg_restore 将继续处理,除非您使用 [=14] =]选项。

如果您的目标是“合并”数据库中的现有数据和转储中的数据,您可能能够做到这一点,前提是您

  • 使用选项 --inserts --on-conflict-do-nothing 选项创建转储

  • 忽略从 CREATE TABLE 语句中得到的错误

  • 对所有 table 有一个主键或唯一约束(这是 INSERT ... ON CONFLICT TO NOTHING 工作所必需的)