我正在尝试转储我的pg db,但得到这些错误,请建议
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
执行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>;
当使用无法打开对象以转储它们的ROLE
(用户)时,这可能是一个常见错误。
就像前面说的,您可以授予您想要转储的特定模式,或者甚至使用具有SUPERUSER
属性的ROLE
。
请注意,当您处理一些云数据库提供商时,如AWS/RDS,您将不会接收到具有SUPERUSER
属性的用户,因此您需要管理以确保用于转储的用户将具有所需的所有访问权限。
https://www.postgresql.org/docs/current/static/sql-grant.html将展示如何将GRANT
分配给数据库上的许多对象,但也要记住,在恢复时需要首先创建数据库。只有在使用pg_dumpall
时才不需要这样做,但是您还需要转储ROLES
。
使用命令cmd
修改用户权限:login as sudo usersudo -u postgres psql
修改用户角色
alter role <user-name> superuser;