pg_dump: [archiver (db)] 查询失败:ERROR: 拒绝访问关于表的权限。

27

我想转储我的pg数据库,但遇到了这些错误,请给予建议。

pg_dump: [archiver (db)] query failed: ERROR:  permission denied for relation abouts
pg_dump: [archiver (db)] query was: LOCK TABLE public.abouts IN ACCESS SHARE MODE
3个回答

26
你正在执行pg_dump的用户对公共模式没有权限。
如果允许的话,请添加权限:
GRANT USAGE ON SCHEMA public TO <user>;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO <user>;

此外,如果有任何顺序,您也应该访问它们:

GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO <user>;

可能还需要执行以下命令:GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO <user>; - TNT
  1. [ sudo ] su postgres
  2. psql
  3. GRANT USAGE ON SCHEMA public TO <user>;
  4. GRANT SELECT ON ALL TABLES IN SCHEMA public TO <user>;
- pd_au

17

在使用ROLE(用户)无法打开要转储的对象时,这可能是常见的错误。

像之前所说的那样,您可以授予要转储的特定模式,甚至使用带有 SUPERUSER 属性的ROLE

请注意,当您处理一些云数据库提供程序(如AWS/RDS)时,您将不会收到具有SUPERUSER属性的用户,因此您需要确保用于转储的用户具有所有所需的访问权限。

https://www.postgresql.org/docs/current/static/sql-grant.html 将展示如何对您的数据库中的许多对象进行授予权限,但还要记住,在恢复时,您需要先创建数据库。只有在使用pg_dumpall时不需要,但您还需要转储ROLES


我正在使用ROLE 'postgres',但我收到了这个错误,所以我不信任这个答案。 - user10664542
@user10664542:角色 'postgres' 不一定是真正的超级用户,其可以访问所有对象。可能需要使用 'postgres' 角色来检查您拥有的权限。当连接到 psql 时,可以使用 \du 命令。 - Vinnix

14

将权限更改为用户:使用以下命令以sudo用户身份登录

sudo -u postgres psql

修改用户角色

alter role <user-name> superuser;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接