Python 排除故障的步骤;django.db.utils.ProgrammingError:拒绝对关系django_迁移的权限”;

Python 排除故障的步骤;django.db.utils.ProgrammingError:拒绝对关系django_迁移的权限”;,python,django,apache,postgresql,github,Python,Django,Apache,Postgresql,Github,对于django出现的“django.db.utils.ProgrammingError:relation django_migrations的权限被拒绝”错误,有哪些基本步骤可以排除故障并缩小其原因 我在最初是一个稳定的生产服务器之后收到了这条消息,但后来对Django、Postgres、Apache和Github的几个方面进行了一些更改。此外,这些更改已经进行了一段时间,我不记得或无法跟踪可能导致问题的每个更改 我在运行python manage.py runserver或任何其他pytho

对于django出现的“django.db.utils.ProgrammingError:relation django_migrations的权限被拒绝”错误,有哪些基本步骤可以排除故障并缩小其原因

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


我在运行
python manage.py runserver
或任何其他
python manage.py…
命令时收到消息,除了
python manage.py check
,该命令表示系统良好。

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

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所提到的,这可能是由于试图迁移Django的psycopg2用户不是表所有者的数据库表引起的。例如,如果项目的
设置.py中有

DATABASES = {
    'default': {
        'USER': 'my_username',
        # ...
您需要检查Django迁移中涉及的表是否属于
my_username
。要在
psql
中执行此操作,可以使用
SELECT*FROM pg_tables ORDER BY tableowner。这使用了视图,该视图“提供对数据库中每个表的有用信息的访问。”
pg_tables
是Postgres的一部分,关系数据库管理系统存储模式元数据的地方

假设所讨论的表属于
其他\u用户名
(而不是
我的\u用户名

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

ALTER TABLE public.<table_name> OWNER TO my_username;
altertablepublic。我的用户名的所有者;

如果您收到此错误并且正在使用Heroku托管平台,则很可能您正试图写入一个行数有限的爱好级数据库


Heroku将允许您
pg:push
数据库,即使超出限制,但它将是只读的,因此不会处理对内容的任何修改,并将抛出此错误。

settings.py文件中的数据库设置是否正确?Postgres中是否存在该用户?密码正确吗?@ResleyRodrigues我在用户
ubuntu
下运行manage.py,但我的虚拟环境将我的数据库用户env变量设置为
dbuser
,这也用于Django的生产设置文件中的数据库定义。在Postgres中,
dbuser
是存在的,我相信它已经被授予了正确的特权
dbuser
具有属性Create DB作为postgres用户,并具有对CTc数据库的访问权限。是否?是的,我查看了前面的问题/答案,我之前的评论包含了我发现的内容。基本上,我没有看到任何迹象表明我的postgres权限被错误地设置为
dbuser
。哇,谢谢你!我一直在到处寻找解决办法。当我已经迁移了一个数据库,然后我试图设置geodjango时,我遇到了这个问题。当我用一个用户创建了一个数据库,然后更改了数据库的所有者时,我遇到了这个问题。表保留了导致此错误的旧所有者。Do fix我删除了数据库,用posgres user重新创建了数据库,将所有权限授予新用户并运行迁移。我不知道怎么做,重新创建整个数据库更容易=)关注Sale或在Linux上安装Saleor的官方文档的人可能需要这个答案。是的。@user3062149,请您同时说明一个明显的事实,即一个用户需要以所有者身份登录到数据库,才能获得其他用户的巨大权限?对于像我这样的未来新手。