pg_restore 运行时如何锁定数据库

How to lock Data Base when pg_restore runs

当 运行 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. 向 pg_restore 命令 (--username=db-admin) 中使用的单个用户授予对该数据库的 CONNECT 权限。
  3. 恢复。
  4. 将所有必需的权限添加到数据库。

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

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

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

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