如果正在进行pg_restore,我们是否会在应用程序中遇到任何运行时问题?

问题描述

我是Postgres恢复事物的新手。我们有一个应用程序,其中多个服务正在使用postgres DB。我们正在为此应用程序添加备份/还原功能支持

它将使用pg_dump进行转储。 并且当用户触发还原工作流时,它将调用“ pg_restore”。

因此,如果正在运行“ pg_restore”,并且那时应用程序正在运行某些查询,将会产生什么影响?它会遇到任何运行时错误吗?在pg_restore期间,postgres是否会删除现有的数据库连接?

解决方法

否,运行pg_restore之前必须断开用户的连接。

pg_restore期望数据库为空,但是您可以使用选项--clean--create删除并重新创建数据库。现在DROP DATABASE将阻塞,直到最后一个会话与数据库断开连接为止。

因此,您可以首先断开会话的连接,方法是在适当的sessoins上调用pg_terminate_backend函数,或者使用v13以后的DROP DATABASE ... (FORCE)