Миграция с базой данных postgres не удалась
Я хочу использовать postgres в качестве базы данных по умолчанию для моих моделей django. Я использую docker-compose для postgres и, похоже, он работает.
version: '3.2'
services:
postgres:
image: postgres:13.4
environment:
POSTGRES_DB: backend_db
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
volumes:
- database-data:/var/lib/postgresql/data/
ports:
- 5432:5432
networks:
- postgres
volumes:
database-data:
driver: local
networks:
postgres:
driver: bridge
Однако, когда я делаю python3 manage.py migrate --database postgres, я получаю следующее:
Operations to perform:
Apply all migrations: admin, auth, authentication, authtoken, contenttypes, sessions, token_blacklist, vpp_optimization
Running migrations:
No migrations to apply.
Проблема проявляется также, когда я делаю python3 manage.py runserver, где я получаю:
Performing system checks...
System check identified no issues (0 silenced).
You have 31 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, authentication, authtoken, contenttypes, sessions, token_blacklist, vpp_optimization.
Run 'python manage.py migrate' to apply them.
April 11, 2022 - 05:32:10
Django version 3.1.7, using settings 'core.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Похоже, что команда python3 manage.py migrate --database postgres не была выполнена.
Вот settings.py часть баз данных:
DATABASES = {
'default': get_config(
'DATABASE_URL',
'sqlite:///' + BASE_DIR.child('db.sqlite3'),
cast=db_url
),
'postgres': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': get_config('DB_NAME', 'backend_db'),
'USER': get_config('DB_USER', 'postgres'),
'PASSWORD': get_config('DB_PASSWORD', 'postgres'),
'HOST': get_config('DB_HOST', 'postgres-service'),
'PORT': get_config('DB_PORT', '5432')
}
}
Есть идеи, что я делаю неправильно?
Проблема в том, что когда вы запускаете:
python3 manage.py migrate --database postgres
Вы явно определяете, что база данных, в которую вы хотите перенести схему базы данных, находится в postgres. Но когда вы запускаете приложение, вы используете:
python3 manage.py runserver
Согласно вашим настройкам, есть ли что-нибудь, что указывает на то, что вы будете использовать postgres db. Поэтому я думаю, что на данный момент вы используете sqlite db.
Одна вещь, которую вы можете сделать, это установить переменную env, чтобы указать, какую базу данных использовать при запуске приложения. Надеюсь, это может помочь.