解决“django.db.utils.ProgrammingError:关系 django_migrations 的权限被拒绝”的步骤

新手上路,请多包涵

排除故障并缩小 Django 出现“django.db.utils.ProgrammingError:关系 django_migrations 的权限被拒绝”错误的原因的一些基本步骤是什么?

我在最初是一个稳定的生产服务器之后收到此消息,但此后对 Django、Postgres、Apache 的几个方面进行了一些更改,并从 Github 拉取。此外,进行这些更改已经有一段时间了,我不记得或无法跟踪可能导致问题的每个更改。

我在运行 python manage.py runserver 或任何其他 python manage.py ... 命令时收到消息,除了 python manage.py check ,它表明系统是好的。

原文由 user3062149 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 918
2 个回答

我能够根据这个问题的说明解决我的 问题。基本上,需要将 postgres 权限重新授予 db 用户。就我而言,这是我在虚拟环境设置文件中设置的用户。从命令行(或在 postgres 中)运行以下命令,其中 mydatabasedbuser 应该是您自己的数据库和用户名:

 psql mydatabase -c "GRANT ALL ON ALL TABLES IN SCHEMA public to dbuser;"
psql mydatabase -c "GRANT ALL ON ALL SEQUENCES IN SCHEMA public to dbuser;"
psql mydatabase -c "GRANT ALL ON ALL FUNCTIONS IN SCHEMA public to dbuser;"

原文由 user3062149 发布,翻译遵循 CC BY-SA 3.0 许可协议

正如 @user3062149 所提到的,这可能是由于尝试迁移 Django 的 psycopg2 用户不是表所有者的数据库表造成的。例如,如果您的项目中有 settings.py

 DATABASES = {
    'default': {
        'USER': 'my_username',
        # ...

您需要检查 Django 迁移中涉及的表是否归 my_username 所有。要在 psql 中执行此操作,您可以使用 SELECT * FROM pg_tables ORDER BY tableowner; 。这使用视图 pg_tables ,它“提供对数据库中每个表的有用信息的访问”。 pg_tables 是 Postgres 系统目录 的一部分,关系数据库管理系统存储模式元数据的地方。

假设有问题的表归 other_username 所有(不是 my_username )。

要更新所有者,您需要调用 psql--username=other_username ,然后更改所有者:

 ALTER TABLE public.<table_name> OWNER TO my_username;

原文由 Brad Solomon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题