Django,在模式迁移期间插入

时间:2015-05-20 18:25:08

标签: django django-south

有时,schemamigration需要很长时间,例如添加/删除/编辑了几个字段。如果您在运行架构迁移时尝试插入表以更改此表的结构,会发生什么?

我知道在完成整个迁移之前,更改不会持久。

1 个答案:

答案 0 :(得分:1)

这种行为取决于底层数据库以及实际迁移的作用。例如,PostgreSQL DDL操作是事务性的;对表的插入将阻塞,直到DDL事务完成。例如,在一个psql窗口中,执行以下操作:

create table kvpair (id serial, key character varying (50), value character varying(100));
begin;
alter table kvpair add column rank integer;

此时,请勿提交交易。在另一个psql窗口中,尝试:

insert into kvpair (key, value) values ('fruit', 'oranges');

你会看到它会阻塞,直到另一个窗口中的事务被提交。

不可否认,这是一个人为的例子 - 被锁定的粒度将取决于操作(DDL更改,索引,DML更新)。此外,任何提交执行的语句都可能具有不同的约束条件。例如,更改上面的alter table语句以包含not null。在commit上,插入失败。

根据我的经验,考虑架构更改的“兼容性”并最大限度地减少将大幅度重组大型表的更改始终是一件好事。通过执行正在运行的系统上可能发生的架构更改,小心注意可以帮助您最大限度地减少停机时间。