我们最近发生了一起事故,导致我们的服务几分钟内不可用。
以下是导致该事件的liquibase脚本:
<addColumn tableName="registration">
<column name="retry_at" value="null" type="DATETIME"/>
<column name="retry_counter" value="null" type="BIGINT"/>
</addColumn>
如您所见,更改集花费了相当多的时间。我们的团队得出结论,默认值设置为null
是导致此问题的原因。然而,我对此感到有些不满意。
当我检查 Postgres 第1页和第 2页时,我发现将值设置为 null 与完全删除默认值没什么不同。因此,我不明白为什么此默认值设置会导致此类问题。顺便提一下,表中有 1200 万行。
正如标题所示,我的问题是,设置默认值是否会导致这样的停机?
应用程序启动:
Started ApplicationKt in 289.989 seconds (process running for 290.727)
liquibase操作前的一些日志:
我找到了根本原因,它确实与
value
liquibase语句中的属性有关。以上摘录自以下链接:
https://docs.liquibase.com/change-types/nested-tags/column.html
因此看起来,我们应该在 liquibase 中使用
defaultValue
而不是value
,或者根本就不放任何内容,因为默认值已经为空。