gpt4 book ai didi

django - 如何从 Django 连接到多个 PostgreSQL 模式?

转载 作者:行者123 更新时间:2023-11-29 11:16:10 25 4
gpt4 key购买 nike

在我的 GeoDjango 项目中,我想连接到旧版 PostgreSQL/PostGIS 数据库。它包含以下模式:

  • data//包含所有地理空间数据
  • django//空的,由我创建
  • public//系统表如spatial_ref_sys

我希望屏幕截图中显示的 Django 表进入 django 模式。我不想污染 public 架构。

Django tables

我希望“数据”模型连接到 data 模式。我已经尝试过 generate models from the legacy tables但是 python manage.py inspectdb 连接到 public 模式。


为了提供对不同模式的访问,我调整了 approach 2 of this article它将单独的 search_path 值预分配给特定的数据库用户:

-- user accessing django schema...
CREATE ROLE django_user LOGIN PASSWORD 'secret';
ALTER ROLE django_user SET search_path TO django, public;

-- user accessing data schema...
CREATE ROLE data_user LOGIN PASSWORD 'secret';
ALTER ROLE data_user SET search_path TO data, public;

然后我配置数据库连接如下:

DATABASES = {

'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'multi_schema_db',
'USER': 'django_user',
'PASSWORD': 'secret',
},

'data': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'multi_schema_db',
'USER': 'data_user',
'PASSWORD': 'secret',
},
}

当“数据”模型连接到 data 模式时,我如何实际配置 Django 使用 django 模式?


读物

最佳答案

您必须利用 search_path:

DATABASES = {

'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'OPTIONS' : {
'options': '-c search_path=django,public'
},
'NAME': 'multi_schema_db',
'USER': 'django_user',
'PASSWORD': 'secret',
},

'data': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'OPTIONS' : {
'options': '-c search_path=data,public'
},
'NAME': 'multi_schema_db',
'USER': 'data_user',
'PASSWORD': 'secret',
},
}

关于django - 如何从 Django 连接到多个 PostgreSQL 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31726064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com