Django:恢复后尝试访问数据库时拒绝权限(迁移)

Rab*_*eih 36 django postgresql

我有一个django 1.4应用程序,在本地开发服务器中有一个填充的postgres 9.1数据库.成功部署后,我想将数据从本地数据库移动到在线数据库,所以我使用了:

pg_dump -f dump.sql -Ox database
Run Code Online (Sandbox Code Playgroud)

然后在服务器上恢复:

psql -1 -f dump.sql database
Run Code Online (Sandbox Code Playgroud)

现在尝试在线登录网站管理员抛出"关系django_session拒绝权限"例外.我试图使用/不使用-Ox开关及其所有组合转储数据,但没有成功.我也放弃了数据库并在服务器上从头开始重新创建它,并在settings.py中设置了正确的所有者.

如果我运行一个没有恢复的正常syndb然后一切正常.

我在这里错过了什么吗?

Rab*_*eih 99

事实证明,您应该在还原后将数据库中所有对象的显式所有权授予所有者.所有者不是超级用户.仅在数据库创建时设置所有者是不够的.迁移的最终解决方案如下:

在客户端:

pg_dump -f dump.sql -Ox database
Run Code Online (Sandbox Code Playgroud)

在服务器上:

su postgres    
dropdb database
createdb database -O user
psql database -f dump.sql
Run Code Online (Sandbox Code Playgroud)

然后设置权限:

psql database -c "GRANT ALL ON ALL TABLES IN SCHEMA public to user;"
psql database -c "GRANT ALL ON ALL SEQUENCES IN SCHEMA public to user;"
psql database -c "GRANT ALL ON ALL FUNCTIONS IN SCHEMA public to user;"
Run Code Online (Sandbox Code Playgroud)

请注意,我们可以在psql控制台中运行sql命令,但是这个表单很容易嵌入到脚本等中.