[英]Using Django Multiple Databases with RedShift
我試圖使用Django多數據庫配置與MYSQL作為我的默認數據庫和redshift作為我的分析數據庫。 我的配置看起來像這樣:
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,
}
}
當我嘗試使用以下命令遷移我的分析應用程序時
python manage.py migrate analytics --database analytics
我看到以下錯誤:
File "/opt/envs/cinematique/bin/django-admin.py", line 5, in <module>
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".
有關如何解決此問題的任何想法? 我使用的是Django==1.7.9
和psycopg2==2.6.1
具體問題是:Django希望創建一個帶有serial
主鍵的遷移管理表來跟蹤遷移歷史記錄。 Redshift不支持這一點。
但是,該方法的更普遍的問題是,您並不真正想要在Redshift數據庫上進行Django式遷移(請參閱如何在Redshift中創建后更改表模式? )。 Redshift適用於大型數據庫,更改它的架構可能是一項重量級工作。
所以答案是:不要使用Redshift的Django遷移。 Syncdb可能沒問題,可以初始化表,但之后您需要手動管理模式。 不要在模型適用於Redshift的應用程序中創建migrations__init__.py文件。
相關/重復問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.