我正在尝试使用 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 取消记录表的信息,特别是因为 auth_permissions 是一个 Django 表(不是我创建的)。我也不确定 UNLOGGED 表是否会复制。
有人有建议吗?
为了将迁移与 BDR 结合使用,您需要仅使用“安全”操作手动创建迁移,因为 BDR 当前无法复制迁移中的操作等操作。
在我最近与第二象限(BDR 开发的主要发起人)的支持人员进行的电子邮件对话中,我获得了有关该主题的以下信息:
目前尚无交付此内容的时间表。这是很难完成的。
您仍然可以更改列的类型,只需执行多个步骤即可。在
一般来说,您在 BDR 中执行 DDL 就像使用
PostgreSQL 中的锁避免方法。所以在这种情况下你:
- 添加不带 DEFAULT 且不带任何 NOT NULL 的新列,然后提交。如果需要,还可以创建一个触发器来自动填充新的
插入值时的列。或者更改新列以设置
默认,如果这样更合适的话。
- 更新表以将值复制到具有新类型的新列
- 如果合适的话,更改表以使其不为空
- 删除旧列
我还发现这篇文章来自 BrainTree https://www.braintreepayments.com/blog/safe-operations-for-high-volume-postgresql/对于什么可以被认为是“安全”操作以及如何重写迁移中的行为是一个很好的参考。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)