使用 pg_restore 创建或覆盖表

m0m*_*eni 4 sql database postgresql pg-dump pg-restore

我知道这是一个奇怪的请求,但由于一些我无法避免的骇人听闻的原因,我希望能够始终如一地将几个表从一个数据库同步到另一个数据库。我知道我可以自己在脚本中写出功能,但我认为pg_dump并将pg_restore对我自己不了解的过程应用很多优化。

我想知道是否有办法pg_restore覆盖现有的表。基本上,在伪代码中是这样的:

-- pseudo code
begin;
drop table to_restore;
drop table to_restore2;
drop table to_restore3;

-- etc

restore table to_restore;
restore table to_restore2;
restore table to_restore3;

-- etc
commit;
Run Code Online (Sandbox Code Playgroud)

如果这不是那么好,我也愿意接受其他方法。

Dee*_*uti 5

似乎您想要pg_restore 文档中-c指定的选项

-C

- 干净的

在重新创建数据库对象之前清理(删除)它们。(除非使用 --if-exists,否则如果目标数据库中不存在任何对象,则这可能会生成一些无害的错误消息。)

您可以将其与-1标志一起用于在一笔交易中完成所有操作

-1

--单笔交易

将恢复作为单个事务执行(即,将发出的命令包装在 BEGIN/COMMIT 中)。这可确保所有命令成功完成,或者不应用任何更改。此选项意味着 --exit-on-error。

  • 恢复部分数据时要小心。有一次,恢复操作失败,我们认为一切都会回滚。我们花了一些时间才明白为什么在插入新行时会出现重复的键值错误:序列表已恢复且未回滚,而未恢复任何数据! (2认同)