Как использовать схемы PostgreSQL с Django dbshell? - PullRequest
0 голосов
/ 01 мая 2019

Как обновить параметры базы данных Django, чтобы все связанные с базой данных команды управления использовали правильную схему, определенную в параметре DATABASES OPTIONS?

Я пытаюсь разместить несколько логических баз данных в одной и той же базе данных PostgreSQL,изолированы схемой.Это объясняется в нескольких вопросах, как этот , поэтому мои настройки базы данных выглядят так:

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 и использование неверной «публичной» схемы по умолчанию.

$ ./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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...