如何更新Django数据库设置,以便所有与数据库相关的管理命令都使用DATABASES OPTIONS参数中定义的正确模式?
我试图在由架构隔离的同一PostgreSQL数据库上托管多个逻辑数据库。 like this one中有多个问题对此进行了解释,因此我的数据库设置如下:
DATABASES[DEFAULT_DB] = {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mycommondatabase',
'USER': 'somecommonuser',
'PASSWORD': 'somecommonpassword',
'HOST': 'localhost',
'PORT': 5432,
'OPTIONS': {
'options': '-c search_path=the_real_database_name'
},
}
但是,当我运行manage.py dbshell
时,我发现它会忽略这些选项,而不是设置search_path,并且默认情况下使用了错误的“ public”模式。
$ ./manage.py dbshell
psql (11.2 (Ubuntu 11.2-1.pgdg16.04+1))
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
mycommondatabase=> SELECT schema_name FROM information_schema.schemata;
schema_name
--------------------
information_schema
public
pg_catalog
the_real_database_name
(4 rows)
mycommondatabase=> select count(*) from sometable;
count
-------
0
(1 row)
mycommondatabase=> SET search_path TO the_real_database_name;
SET
mycommondatabase=> select count(*) from sometable;
count
-------
1
(1 row)
默认情况下,用户确实已为其分配了公共架构,因此看起来PostgreSQL忽略了传入的架构并使用了用户分配的架构,或者Django没有传入要使用的架构。
该如何解决?我无法将用户分配给该架构,因为可能会有多个架构,因此要使用的架构必须通过DATABASES设置传入。