如何在Django dbshel​​l中使用PostgreSQL模式?

时间:2019-05-01 20:51:58

标签: django postgresql

如何更新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设置传入。

0 个答案:

没有答案