使用Postgres BDR 9.4.1进行Django 1.8迁移

4
我正在尝试在使用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表是否会被复制。请问有人有什么建议吗?
2个回答

6
为了在BDR中使用迁移,您需要手动创建迁移,只使用“安全”操作,因为BDR目前无法复制您的迁移中的操作。
最近我通过电子邮件与2nd Quadrant支持团队(BDR开发的主要赞助者)进行了谈话,他们向我提供了关于此主题的信息:
引用: 没有时间表来交付这一点。 它非常难以完成。 您仍然可以更改列的类型,只是需要多个步骤。 通常,在BDR中执行DDL就像您在股票PostgreSQL中避免锁定的方式一样进行。 因此,在这种情况下,您需要: 添加新列而不带有默认值和任何NOT NULL,并提交。 如果需要,还可以创建触发器以在插入值时自动填充新列。 或者如果更合适,可以ALTER新列设置默认值。 更新表以将值复制到具有新类型的新列中 如果适当,则更改表以使其为NOT NULL 删除旧列
我也发现BrainTree的这篇文章是一个很好的参考,可以被视为“安全”操作,并且告诉你如何在迁移中重写该行为。

谢谢Joey。虽然他们还不支持这些东西,但这非常有帮助。 - keda
同意。然而,缺乏支持确实鼓励高可用性的最佳实践,正如BrainTree那篇文章所指出的那样。 - Joey Wilhelm

3

您可以使用MIGRATION_MODULES设置来覆盖auth应用程序的内置迁移,例如:

MIGRATION_MODULES = {
    'auth': 'bdr_migrations.auth',
}

然后将迁移文件从django包复制到/project/bdr_migrations/auth/,并调整它们以匹配BDR的限制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接