Приветствую.
Захотелось мне изолировать базы данных проектов.
Посмотрел вокруг и решил что схемы psql то, что мне нужно.
И django их умеет. Нарисовал в сетинсах две схемы.
DATABASES = {
'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'django',
'USER': 'd',
'PASSWORD': '***',
'HOST': '127.0.0.1',
'PORT': '5432',
'OPTIONS': { 'options': '-c search_path=django'}},
'messenger': {'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'django',
'USER': 'messenger',
'PASSWORD': '***',
'HOST': '127.0.0.1',
'PORT': '5432',
'OPTIONS': {'options': '-c search_path=messenger' }}}
написал роут.
class Route(object):
def allow_migrate(self, db, app_label, model=None, **hints):
if app_label == 'messenger':
if db == 'messenger':
return True
else:
return False
else:
return True
Делаю миграцию, В бд default уезжают все внутри джанговские приложения,
Делаю миграцию для своего проекта (фай модели не пустой).
./manage.py makemigrations messenger
Migrations for 'messenger':
0001_initial.py:
- Create model Email
- Create model Error
- Create model EventMessenger
- Create model PhoneNumber
- Create model User
- Add field user to phonenumber
- Add field eventmessenger to error
- Add field user to error
- Add field user to email
./manage.py migrate messenger
Operations to perform:
Apply all migrations: messenger
Running migrations:
Rendering model states... DONE
Applying messenger.0001_initial... OK `
молча исполняется, в бд пусто.
./manage.py dbshell --database messenger
psql (9.1.20)
django=> \c django
Вы подключены к базе данных "django" как пользователь "messenger".
django=> SELECT SESSION_USER, CURRENT_USER;
session_user | current_user
--------------+--------------
messenger | messenger
(1 строка)
django=> \dn
Список схем
Имя | Владелец
-----------+-----------
django | django
messenger | messenger
public | postgres
(3 строки)
django=> show search_path;
search_path
----------------
"$user",public
(1 строка)
django=> \dt
Отношения не найдены.
Видно что переопределить search_path django не удалось Но в данном случае это не важно так как имя пользователя и имя схемы совпадает.
Что я делаю не так? Я очень хочу вашей помощи.