pg_restore 运行时如何锁定数据库

问题描述

在运行 pg_restore 时,我们会遇到一些其他程序的一些(意外)执行,导致恢复错误

有没有办法在恢复时锁定数据库以确保不进行任何修改

这是执行的命令:

pg_restore --clean --verbose --no-owner /home/postgres/backup/bkp --if-exists -j 7 -d restdb01 -p 5432

解决方法

pg_restore 的 PostgreSQL 文档没有提供此类功能的任何信息。

根据wiki postgresql 不支持数据库锁定。

我建议使用权限机制来防止任何连接到数据库的人被恢复:

  1. 创建一个新数据库。
  2. 将对该数据库的 CONNECT 权限授予 pg_restore 命令中使用的单个用户 (--username=db-admin)。
  3. 恢复。
  4. 向数据库添加所有必需的权限。

除非您有应用程序以超级用户身份连接到您的服务器,否则这将阻止应用程序读取或更改

,
  • pg_hba.conf中撤销数据库的连接权限或拒绝连接(请记住,默认情况下,PUBLIC可以连接到数据库)

  • 使用 pg_terminate_backend 取消所有现有连接

  • 以仍然可以连接到数据库的用户身份运行 pg_restore