将Postgres DB还原到新服务器后的权限问题

时间:2019-01-15 17:07:57

标签: postgresql psql

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

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

创建了新用户,并将所有权限分配给新数据库。当我与该新用户建立连接以恢复数据库时,并且想要在公共模式内的任何表上进行选择时,访问都会被拒绝。为什么?

1 个答案:

答案 0 :(得分:0)

因此,我设法解决了这个问题,总之,问题是用于还原的admin用户是还原的所有内容的所有者,创建新的DB用户以用于应用程序使用并将所有内容转移给新用户都是噩梦。因此,以下是执行此正确方法的步骤:

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

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