一尘不染

Django:还原(迁移)后尝试访问数据库时,权限被拒绝

django

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

pg_dump -f dump.sql -Ox database

然后使用以下命令在服务器上还原:

psql -1 -f dump.sql database

现在尝试在线登录到网站管理员会引发“关系django_session的权限被拒绝”异常。我尝试使用/不使用-Ox开关及其所有组合来转储数据,但是没有成功。我还将删除数据库,并使用settings.py中设置的正确所有者在服务器上从头开始创建数据库。

如果我没有还原就运行普通的syndb,则一切正常。

我在这里想念什么吗?


阅读 614

收藏
2020-03-31

共1个答案

一尘不染

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

在客户端上:

pg_dump -f dump.sql -Ox database

在服务器上:

su postgres    
dropdb database
createdb database -O user
psql database -f dump.sql

然后设置特权:

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;"

注意,我们可以在psql控制台中运行sql命令,但是这种形式很容易嵌入到脚本等中。

2020-03-31