使用Postgres BDR 9.4.1进行Django 1.8迁移

ked*_*eda 4 migration django postgresql replication postgresql-bdr

我正在尝试使用BDR在Postgres数据库上运行Django迁移.

python manage.py makemigrations

工作正常,但正在运行

python manage.py migrate

导致以下错误:

ALTER TABLE … ALTER COLUMN TYPE … may only affect UNLOGGED or TEMPORARY tables when BDR is active; auth_permission is a regular table

违规模块是django/django/contrib/auth/migrations/0002_alter_permission_name_max_length.py.

我没有找到任何关于如何使用Django的UNLOGGED表,特别是因为auth_permissions是一个Django表(不是我创建的).我也不确定UNLOGGED表是否会复制.

有人有建议吗?

Joe*_*elm 6

要使用BDR进行迁移,您需要手动创建迁移,仅使用"安全"操作,因为BDR当前无法复制迁移中的操作.

在最近我在第二象限(BDR开发的主要赞助商)的支持下的电子邮件对话中,我收到了有关该主题的信息:

提供此服务没有时间表.这很难完成.

您仍然可以更改列的类型,它只需要多个步骤.一般情况下,您在BDR中执行DDL,就像在PostgreSQL中使用锁定避免方法一样.所以在这种情况下你:

  • 添加没有DEFAULT且没有任何NOT NULL的新列,并提交.如果需要,还可以创建一个触发器,以便在插入值时自动填充新列.或者更改新列以设置DEFAULT,如果这更合适.
  • 更新表以使用新类型将值复制到新列
  • 如果合适,改变表使其为NOT NULL
  • DROP旧列

我还发现BrainTree的这篇文章是一个很好的参考,可以被认为是"安全"操作,以及如何重写迁移中的行为.