Uso de múltiples bases de datos Django con RedShift

Estoy tratando de usar una configuración de base de datos múltiple de Django con MYSQL como mi base de datos predeterminada y un desplazamiento al rojo como mi base de datos de análisis. Mi configuración se ve en algún momento así:

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'xxxx', 'USER': 'xxxx', 'PASSWORD': 'xxxx', 'HOST': 'localhost', }, 'analytics': { 'NAME': 'analytics', 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'USER': 'XXXXXXXXX', 'PASSWORD': 'XXXXX', 'HOST': 'XXXXX.us-east-1.redshift.amazonaws.com', 'PORT': 5439, } } 

Cuando bash migrar mi aplicación de análisis, usando el siguiente comando

 python manage.py migrate analytics --database analytics 

Estoy viendo el siguiente error:

  File "/opt/envs/cinematique/bin/django-admin.py", line 5, in  management.execute_from_command_line() File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line utility.execute() File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv self.execute(*args, **options.__dict__) File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute output = self.handle(*args, **options) File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 60, in handle return self.show_migration_list(connection, args) File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 308, in show_migration_list loader = MigrationLoader(connection, ignore_no_migrations=True) File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 48, in __init__ self.build_graph() File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 183, in build_graph self.applied_migrations = recorder.applied_migrations() File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/db/migrations/recorder.py", line 59, in applied_migrations self.ensure_schema() File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/db/migrations/recorder.py", line 53, in ensure_schema editor.create_model(self.Migration) File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/db/backends/schema.py", line 270, in create_model self.execute(sql, params) File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/db/backends/schema.py", line 111, in execute cursor.execute(sql, params) File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 81, in execute return super(CursorDebugWrapper, self).execute(sql, params) File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 65, in execute return self.cursor.execute(sql, params) File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/opt/envs/cinematique/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 65, in execute return self.cursor.execute(sql, params) django.db.utils.NotSupportedError: Column "django_migrations.id" has unsupported type "serial". 

¿Alguna idea sobre cómo resolver este problema? Estoy usando Django==1.7.9 y psycopg2==2.6.1

El problema específico es: Django quiere crear una tabla de administración de la migración con una clave principal serial para rastrear el historial de migración. Redshift no soporta eso.

Sin embargo, el problema más general con este enfoque es que realmente no desea migraciones al estilo de Django en una base de datos de Redshift (ver cosas como ¿Cómo cambiar el esquema de una tabla después de crearla en Redshift? ). Redshift está diseñado para grandes bases de datos y cambiar su esquema puede ser un trabajo pesado.

Entonces, la respuesta es: no use migraciones de Django con desplazamiento al rojo. Syncdb podría estar bien, para inicializar sus tablas, pero después necesitará administrar el esquema manualmente. No cree un archivo migrations__init__.py en una aplicación cuyos modelos estén diseñados para Redshift.

Preguntas relacionadas / duplicadas aquí:

  • La columna ‘django_migrations.id’ tiene un tipo no compatible ‘serial’ [con Amazon Redshift]
  • Error: django_migrations.id tiene un tipo “serial” no compatible con Amazon Redshift