两个具有相同数据库的 Django 项目 - 关系权限被拒绝 django_migrations
Two Django projects with same database - permission denied for relation django_migrations
我有两个没有以任何方式连接的 django 项目,都在本地主机上。我想让他们都使用同一个数据库。
我正在尝试在第一个项目成功后在第二个项目上创建迁移,但是出现异常:
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中的DB访问权限shell:
=Tc/simeonparvanov
simeonparvanov=CTc/simeonparvanov
srt_side_by_side_admin=CTc/simeonparvanov
srt_side_by_side_admin_2=CTc/simeonparvanov
知道我做错了什么吗?
您不需要创建两个单独的用户。欲了解更多信息,请查看 https://groups.google.com/forum/#!msg/django-users/uA_XyGYKn2o/km80RXBB2uMJ
问题是两个项目都有自己的迁移文件并且它们冲突,解决方案是只选择一个项目来管理你的数据库(迁移和更改)而另一个项目应该只连接到数据库(不改变数据库结构)
假设你已经选择了你的主要项目(运行s 迁移的那个)我可以为你的第二个项目想出两个解决方案
- 运行 secons 项目的迁移
--fake
参数:docs
Tells Django to mark the migrations as having been applied or unapplied, but without actually running the SQL to change your database schema.
- 在你的模型class中为第二个项目设置元选项
managed
到False
(它告诉django你将手动处理这个模型的数据库创建和迁移docs
示例代码:
class MyModel(models.Model):
# fields
# ...
class Meta:
managed = False
您的项目是否没有任何关系,您只想 运行 只有一个 postgres 服务器实例?
如果是这样,那么您只需要在 postgres 中创建两个单独的数据库,将您的用户设置为拥有它们,然后在配置的 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': '',
}
}
我有两个没有以任何方式连接的 django 项目,都在本地主机上。我想让他们都使用同一个数据库。
我正在尝试在第一个项目成功后在第二个项目上创建迁移,但是出现异常:
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中的DB访问权限shell:
=Tc/simeonparvanov
simeonparvanov=CTc/simeonparvanov
srt_side_by_side_admin=CTc/simeonparvanov
srt_side_by_side_admin_2=CTc/simeonparvanov
知道我做错了什么吗?
您不需要创建两个单独的用户。欲了解更多信息,请查看 https://groups.google.com/forum/#!msg/django-users/uA_XyGYKn2o/km80RXBB2uMJ
问题是两个项目都有自己的迁移文件并且它们冲突,解决方案是只选择一个项目来管理你的数据库(迁移和更改)而另一个项目应该只连接到数据库(不改变数据库结构)
假设你已经选择了你的主要项目(运行s 迁移的那个)我可以为你的第二个项目想出两个解决方案
- 运行 secons 项目的迁移
--fake
参数:docs
Tells Django to mark the migrations as having been applied or unapplied, but without actually running the SQL to change your database schema.
- 在你的模型class中为第二个项目设置元选项
managed
到False
(它告诉django你将手动处理这个模型的数据库创建和迁移docs
示例代码:
class MyModel(models.Model):
# fields
# ...
class Meta:
managed = False
您的项目是否没有任何关系,您只想 运行 只有一个 postgres 服务器实例?
如果是这样,那么您只需要在 postgres 中创建两个单独的数据库,将您的用户设置为拥有它们,然后在配置的 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': '',
}
}