我使用该命令为Postgres数据库转储了一个干净的,没有所有者备份
pg_dump sample_database -O -c -U
后来,当我用数据库恢复时
psql -d sample_database -U app_name
但是,我遇到了一些错误,导致我无法恢复数据:
我深入研究了纯文本sql pg_dump生成,我发现它包含sql
我认为原因是用户app_name没有更改公共模式和plpgsql的权限.
我怎么能解决这个问题?
要解决此问题,您必须分配正确的所有权权限.请尝试以下解决方案,以解决特定用户的所有权限相关问题,但正如评论中所述,这不应在生产中使用:
- root@server:/var/log/postgresql# sudo -u postgres psql
- psql (8.4.4)
- Type "help" for help.
- postgres=# \du
- List of roles
- Role name | Attributes | Member of
- -----------------+-------------+-----------
- <user-name> | Superuser | {}
- : Create DB
- postgres | Superuser | {}
- : Create role
- : Create DB
- postgres=# alter role <user-name> superuser;
- ALTER ROLE
- postgres=#
因此,在超级用户帐户sudo -u postgres psql下连接到数据库并执行ALTER ROLE< user-name>超级用户;声明.
请记住,这不是多站点托管服务器上的最佳解决方案,因此请查看分配各个角色:https://www.postgresql.org/docs/current/static/sql-set-role.html和https://www.postgresql.org/docs/current/static/sql-alterrole.html.