将 Postgres 数据库恢复到新服务器后出现权限问题

Issue with permissions after restoring Postgres DB to new server

我使用以下命令备份源服务器上的数据库:

pg_dump --no-acl  -h "server" --port "1234"  -U "admin"  --no-owner dbname > dbname_dump.sql

然后在新服务器上我创建了空数据库 newdb 并使用这个命令来恢复数据库

psql -U postgres -d newdb  -f dbname_dump.sql

创建了新用户,分配了对新数据库的所有权限。当我与该新用户连接以恢复数据库时,当我想对 public 模式中的任何 table 执行 select 时,我的访问被拒绝。为什么?

所以我设法解决了这个问题,简而言之,问题是用于恢复的管理员用户是恢复的所有内容的所有者,为应用程序使用创建新的数据库用户并将所有内容转移给新用户是一场噩梦。因此,以下是正确执行此操作的步骤:

  1. 使用 --no-acl 和 --no-owner 开关作为管理员备份源数据库
  2. 在新服务器上创建新的空数据库
  3. 在新服务器上创建数据库用户,应用程序将使用该用户连接到新创建的数据库
  4. 授予在新创建的数据库上创建的用户的所有权限
  5. 将该新用户的数据库恢复到新创建的数据库中

现在应用程序正在运行,我可以 运行 数据库迁移脚本,所以一切都按预期运行。由于我是 PGSQL 新手,我不知道只有所有者可以在 table 上进行删除或更改,但在阅读手册后,事情变得更加清晰。