postgres 的 Django 1.8 迁移错误
Posted
技术标签:
【中文标题】postgres 的 Django 1.8 迁移错误【英文标题】:Django 1.8 migration error with postgres 【发布时间】:2018-01-14 17:14:13 【问题描述】:我是 Django 新手,我正在尝试使用 Django(1.8) 在 Postgre 中创建表
以下是我的模型类
class Student(models.Model):
name = models.CharField(max_length = 50)
degree = models.CharField(max_length = 50)
numofsubs = models.IntegerField()
namesofsubs= models.CharField(max_length = 50)
details = models.CharField(max_length = 50)
class Meta:
db_table = "student"
views.py
def addStudent(request):
student = Student(name = request.name, degree = request.degree ,
numofsubs = request.numofsubs , nameofsubs = request.nameofparams , details = request.details)
student.save()
print 'data saved'
在我尝试运行 python manage.py migrate 进行这些更改后,我得到了django.db.utils.ProgrammingError: permission denied for relation django_migrations
以下是堆栈跟踪
Traceback(最近一次调用最后一次):文件“manage.py”,第 10 行,在 execute_from_command_line(sys.argv) 文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/core/management/init.py”, 第 338 行,在 execute_from_command_line utility.execute() 文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/core/management/init.py”, 第 330 行,执行中 self.fetch_command(subcommand).run_from_argv(self.argv) 文件 "/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/core/management/base.py", 第 390 行,在 run_from_argv self.execute(*args, **cmd_options) 文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/core/management/base.py”, 第 441 行,执行中 输出 = self.handle(*args, **options) 文件 "/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", 第 93 行,在句柄中 executor = MigrationExecutor(connection, self.migration_progress_callback) 文件 “/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/db/migrations/executor.py”, 第 19 行,在 init 中 self.loader = MigrationLoader(self.connection) 文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/db/migrations/loader.py”, 第 47 行,在 init 中 self.build_graph() 文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/db/migrations/loader.py”, 第 180 行,在 build_graph self.applied_migrations = recorder.applied_migrations() 文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/db/migrations/recorder.py”, 第 60 行,在应用迁移中 return set(tuple(x) for x in self.migration_qs.values_list("app", "name")) 文件 “/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/db/models/query.py”, 第 162 行,在 iter 中 self._fetch_all() 文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/db/models/query.py”, 第 965 行,在 _fetch_all 中 self._result_cache = list(self.iterator()) 文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/db/models/query.py”, 第 1220 行,在迭代器中 对于 compiler.results_iter() 中的行:文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py”, 第 783 行,在 results_iter 中 结果 = self.execute_sql(MULTI) 文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py”, 第 829 行,在 execute_sql 中 cursor.execute(sql,params)文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/db/backends/utils.py”, 第 79 行,在执行中 返回超级(CursorDebugWrapper,self).execute(sql,params)文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/db/backends/utils.py”, 第 64 行,在执行中 返回 self.cursor.execute(sql, params) 文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/db/utils.py”, 第 97 行,在 退出 六.reraise(dj_exc_type,dj_exc_value,traceback)文件“/usr/lib/ckan/default/local/lib/python2.7/site-packages/django/db/backends/utils.py”, 第 64 行,在执行中 return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: 关系的权限被拒绝 django_migrations
我的settings.py
有以下用于 db 连接的配置
DATABASES =
'default':
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'abc',
'USER': 'xyz',
'PASSWORD': 'xxxxx',
'HOST': 'localhost',
'PORT': 5432,
请指导我的应用程序出了什么问题。
谢谢
【问题讨论】:
您是否以 django 用户为所有者创建了 postgres 数据库? 我在通过 shel 安装 postgres 时创建了 db,现在我想通过 django 连接到该 db 并在表中创建和插入数据 你能测试本地连接psql -h localhost -U xyz abc
吗?
【参考方案1】:
您可能需要允许您的用户使用 Grands:
GRANT ALL ON DATABASE abc TO xyz;
【讨论】:
【参考方案2】:我不建议做 GRANT ALL。但是,正如 Bear Brown 指出的那样,这听起来像是权限问题,因此请确保您至少具有相关架构的 USAGE 和表的 SELECT 权限。先连接abc数据库,然后在public上授予select权限:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO xyz
【讨论】:
以上是关于postgres 的 Django 1.8 迁移错误的主要内容,如果未能解决你的问题,请参考以下文章