我想转储我的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
我想转储我的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
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 将展示如何对您的数据库中的许多对象进行授予权限,但还要记住,在恢复时,您需要先创建数据库。只有在使用pg_dumpall
时不需要,但您还需要转储ROLES
。
psql
时,可以使用 \du 命令。 - Vinnix将权限更改为用户:使用以下命令以sudo用户身份登录
sudo -u postgres psql
修改用户角色
alter role <user-name> superuser;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO <user>;
。 - TNT[ sudo ] su postgres
psql
GRANT USAGE ON SCHEMA public TO <user>;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO <user>;