0

我有一个关于如何正确执行数据库迁移的问题,特别是重命名列。

假设表有A列,我想将其重命名为B。如果我重命名然后部署引用B的代码,在执行迁移之后和部署代码之前,我会出错,因为代码不会与架构保持同步。另一方面,如果我先部署代码,也会出现错误,因为代码将引用列 B,直到执行迁移。

所以我认为最好的方法是,在部署代码之前,使用 A 的数据创建一个新列 B,然后部署。起初我以为这样就可以了,但后来我意识到用A的数据制作B列后,可以在表中插入新数据。那么,这样做的标准方法是什么?

提前致谢。

4

1 回答 1

0

如果您的要求是在不停机的情况下执行此操作,您可以尝试以下操作:

1) Add your new column B
2) Add a trigger that updates Column B every time Column A is updated, 
   and Column B every time Column A is updated. 
   Note that RECURSIVE_TRIGGERS must be set to OFF
2a) If you want to you could add a second column CodeVersion which can help identify 
    what version of the code was used, and which direction to copy data in the trigger,
    and avoid any issues with recursion
3) Copy all the data from Column A to Column B
4) At your leasure, upgrade the code. You could do this over a period of time
5) Once everyone is on the new version, remove the trigger and the old column
于 2019-06-11T06:20:16.680 回答