恢复PostgreSQL数据库时如何解决权限问题

前端之家收集整理的这篇文章主要介绍了恢复PostgreSQL数据库时如何解决权限问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用该命令为Postgres数据库转储了一个干净的,没有所有者备份

pg_dump sample_database -O -c -U

后来,当我用数据库恢复时

psql -d sample_database -U app_name

但是,我遇到了一些错误,导致我无法恢复数据:

  1. ERROR: must be owner of extension plpgsql
  2. ERROR: must be owner of schema public
  3. ERROR: schema "public" already exists
  4. ERROR: must be owner of schema public
  5. CREATE EXTENSION
  6. ERROR: must be owner of extension plpgsql

我深入研究了纯文本sql pg_dump生成,我发现它包含sql

  1. CREATE SCHEMA public;
  2. COMMENT ON SCHEMA public IS 'standard public schema';
  3. CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
  4. COMMENT ON EXTENSION plpgsql IS 'PL/pgsql procedural language';

我认为原因是用户app_name没有更改公共模式和plpgsql的权限.

我怎么能解决这个问题?

解决此问题,您必须分配正确的所有权权限.请尝试以下解决方案,以解决特定用户的所有权限相关问题,但正如评论中所述,这不应在生产中使用:
  1. root@server:/var/log/postgresql# sudo -u postgres psql
  2. psql (8.4.4)
  3. Type "help" for help.
  4.  
  5. postgres=# \du
  6. List of roles
  7. Role name | Attributes | Member of
  8. -----------------+-------------+-----------
  9. <user-name> | Superuser | {}
  10. : Create DB
  11. postgres | Superuser | {}
  12. : Create role
  13. : Create DB
  14.  
  15. postgres=# alter role <user-name> superuser;
  16. ALTER ROLE
  17. postgres=#

因此,在超级用户帐户sudo -u postgres psql下连接到数据库并执行ALTER ROLE< user-name>超级用户;声明.

请记住,这不是多站点托管服务器上的最佳解决方案,因此请查看分配各个角色:https://www.postgresql.org/docs/current/static/sql-set-role.htmlhttps://www.postgresql.org/docs/current/static/sql-alterrole.html.

猜你在找的Postgre SQL相关文章