是否可以仅从最新的PostgreSQL转储恢复新更改

是否可以仅从最新的PostgreSQL转储恢复新更改,postgresql,dump,Postgresql,Dump,现在,从备份/转储恢复大约需要20分钟 pg_restore --create --exit-on-error --verbose -U postgres --dbname=postgres --verbose --clean -F directory mydb.dump Q:是否可以从最新的PostgreSQL转储中仅恢复新更改(以节省时间), 每当有人更改数据库或添加新数据时 -- 我知道ppl通常使用sql脚本,并将它们应用到数据库中。但是如果没有脚本。因为数据库是从外部更改的。在

现在,从备份/转储恢复大约需要20分钟

pg_restore  --create --exit-on-error --verbose  -U postgres --dbname=postgres  --verbose --clean -F directory mydb.dump
Q:是否可以从最新的PostgreSQL转储中仅恢复新更改(以节省时间), 每当有人更改数据库或添加新数据时

--


我知道ppl通常使用sql脚本,并将它们应用到数据库中。但是如果没有脚本。因为数据库是从外部更改的。

pg_restore
中不支持该功能,但是从PostgreSQL v12开始,您可以使用
pg_dump
选项
--inserts--on conflict do nothing
。这样的转储将只还原那些不违反主键或还原到的表上的唯一约束的行。

否,pg\u restore无法知道哪些是新更改。也许它可以依赖于您保存在表中的时间戳,但它不知道如何做到这一点,您必须编写代码来教授它


听起来您真正想要的是使用物理备份,然后进行WAL回放。

我认为转储文件没有存储任何时间戳,因此它不知道什么数据是“新的”。此外,它不存储已删除的数据,因此您无法从“旧”数据中应用删除操作。我认为OP希望的是什么都不做的相反-他只希望应用冲突的更改来加快转储的加载。然后,我想知道是否可能为应用于它的每个db更改动态生成sql片段。因此,后者可能比旧的更冷。我猜是另外一个问题。。比如事件日志。并将其作为数据库还原应用。听起来您需要逻辑复制。有内置的带有发布和订阅的逻辑复制,但这更多用于即时复制,而不是为将来的应用程序保存更改。所以,也许是“pg_Recvlologic”,尽管我认为这更多是为了测试和作为示例,而不是为了实际生产使用。