【问题标题】:How to lock Data Base when pg_restore runspg_restore 运行时如何锁定数据库
【发布时间】:2021-06-25 09:09:48
【问题描述】:
在运行 pg_restore 时,我们会遇到来自其他一些程序的一些(意外)执行,从而导致恢复错误。
有没有办法在恢复时锁定数据库以确保不进行任何修改?
这是执行的命令:
pg_restore --clean --verbose --no-owner /home/postgres/backup/bkp --if-exists -j 7 -d restdb01 -p 5432
【问题讨论】:
标签:
postgresql
psql
pg-restore
backup-sqldatabase
【解决方案1】:
-
撤销数据库的连接权限或拒绝pg_hba.conf中的连接(记住默认情况下PUBLIC可以连接数据库)
-
使用pg_terminate_backend 取消所有现有连接
-
以仍然可以连接到数据库的用户身份运行pg_restore
【解决方案2】:
pg_restore 的 PostgreSQL 文档不提供此类功能的任何信息。
根据wiki postgresql 不支持数据库锁定。
我建议使用权限机制来防止任何连接到数据库的人被恢复:
- 创建一个新数据库。
- 将对该数据库的 CONNECT 权限授予 pg_restore 命令中使用的单个用户 (--username=db-admin)。
- 恢复。
- 将所有必需的权限添加到数据库。
除非您有应用程序以超级用户身份连接到您的服务器,否则会阻止应用程序读取或更改