我有两个django项目没有以任何方式连接,都在localhost上。我想让他们都使用相同的数据库。
我试图在第一个项目成功后创建第二个项目的迁移但是,我得到了一个例外:
django.db.utils.ProgrammingError: permission denied for relation django_migrations
我的设置如下:
//First project
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'srt_side_by_side',
'USER': 'srt_side_by_side_admin',
'PASSWORD': '******************',
'HOST': 'localhost',
'PORT': '',
}
}
//Second project
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'srt_side_by_side',
'USER': 'srt_side_by_side_admin_2',
'PASSWORD': '**************',
'HOST': 'localhost',
'PORT': '',
}
}
我已向两位用户授予SUPERUSER权限。 我尝试在作为psql shell中的相应用户连接时设置个人权限。
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to srt_side_by_side_admin_2;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to srt_side_by_side_admin_2;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to srt_side_by_side_admin_2;
psql shell中的数据库访问权限:
=Tc/simeonparvanov
simeonparvanov=CTc/simeonparvanov
srt_side_by_side_admin=CTc/simeonparvanov
srt_side_by_side_admin_2=CTc/simeonparvanov
知道我做错了什么吗?
答案 0 :(得分:3)
问题是两个项目都有自己的迁移文件并且它们发生冲突,解决方案是只选择一个项目来管理数据库(迁移和更改),另一个项目应该只连接到数据库(不更改数据库结构)< / p>
假设您已经选择了主项目(运行迁移的项目),我可以为您的第二个项目考虑两个解决方案
--fake
参数运行secons项目的迁移:docs 告诉Django将迁移标记为已应用或未应用,但没有实际运行SQL来更改数据库架构。
managed
设置为False
(它告诉django您将手动处理此模型的数据库创建和迁移docs 示例代码:
class MyModel(models.Model):
# fields
# ...
class Meta:
managed = False
答案 1 :(得分:1)
您无需创建两个单独的用户。了解更多信息https://groups.google.com/forum/#!msg/django-users/uA_XyGYKn2o/km80RXBB2uMJ
答案 2 :(得分:1)
您的项目是否没有任何关系,您只想运行一个postgres服务器实例?
如果是这样,您只需要在postgres中创建两个单独的数据库,将您的用户设置为拥有它们,然后在config的name
字段中设置它们的名称。
类似的东西:
CREATE DATABASE srt_side_by_side_2 OWNER srt_side_by_side_admin;
然后为第二个项目配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'srt_side_by_side_2',
'USER': 'srt_side_by_side_admin',
'PASSWORD': '**************',
'HOST': 'localhost',
'PORT': '',
}
}