【问题标题】:Django, Insertion during schema migrationDjango,模式迁移期间的插入
【发布时间】:2015-05-20 18:25:07
【问题描述】:

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

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

【问题讨论】:

    标签: django django-south


    【解决方案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 上,插入失败。

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

    【讨论】:

      猜你喜欢
      • 2015-09-25
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 2015-03-02
      • 2016-11-21
      • 2018-06-22
      • 2013-07-10
      相关资源
      最近更新 更多