我有一个关于如何正确执行数据库迁移的问题,特别是重命名列。
假设该表具有一列A,并且我想将其重命名为B。如果执行重命名然后部署引用B的代码,则在执行迁移之后和部署代码之前,我将遇到错误,因为代码不会与架构保持最新。另一方面,如果我首先部署代码,那么我也会遇到错误,因为代码将引用B列,直到执行迁移为止。
因此,我认为最好的方法是在部署代码之前,使用A的数据创建一个新列B,然后进行部署。起初我以为可以,但是后来我意识到,用A的数据在B列中插入新数据后,就可以在表中插入新数据了。那么,什么标准方法呢?
谢谢。
答案 0 :(得分: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