问题描述
我是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)
。