Django执行makemigrations报错psycopg2权限不足问题求助
我来帮你解决这个Django迁移的权限问题!看起来问题的核心是你的数据库用户fishercoderuser没有在public schema下创建新表的权限,也没有针对未来创建对象的默认权限——你之前执行的GRANT ALL ON ALL TABLES...只对已经存在的表生效,而Django需要创建django_migrations这类系统表时就会触发权限错误。
跟着来做以下步骤:
1. 给用户添加Schema级别的创建权限
首先用postgres超级用户登录到fishercoder数据库:
psql -U postgres fishercoder
然后执行命令,赋予fishercoderuser在public schema下创建表的权限:
GRANT CREATE ON SCHEMA public TO fishercoderuser;
2. 设置默认权限(关键!)
这一步是确保未来在public schema下创建的所有表、序列、函数都会自动赋予fishercoderuser权限,避免后续再遇到类似问题:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO fishercoderuser; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO fishercoderuser; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON FUNCTIONS TO fishercoderuser;
3. 验证权限并重新执行迁移
退出psql(输入\q回车),然后可以重启PostgreSQL服务确保权限生效:
sudo service postgresql restart
回到你的Django项目目录,先执行迁移创建必要的系统表:
./manage.py migrate
之后再执行makemigrations就不会有问题了:
./manage.py makemigrations
补充说明
你之前查询不到django_migrations表是正常的——因为你导入的是第三方SQL备份,里面本来就没有Django的系统表,Django需要通过migrate命令来创建这些表。之前的权限错误是因为fishercoderuser没有权限创建这个表,错误信息虽然看起来是“查询权限不足”,但核心还是没有创建新表的权限。
内容的提问来源于stack exchange,提问作者Fisher Coder
相关产品推荐
相关产品推荐

