我有一个postgresql 11 db的表,有70M+行。我想添加一个带有DEFAULT now()
的inserted_on
列。但是,我希望该默认值仅应用于从此时开始插入的行(现有行应该为NULL)。有办法做到这一点吗?
我想把NULL留在那里有几个原因:
- 重写整个表所需的时间(和停机时间)
- 该值对于先前插入的行没有意义,因此我希望将其保留为NULL
有办法做到这一点吗?
我有一个postgresql 11 db的表,有70M+行。我想添加一个带有DEFAULT now()
的inserted_on
列。但是,我希望该默认值仅应用于从此时开始插入的行(现有行应该为NULL)。有办法做到这一点吗?
我想把NULL留在那里有几个原因:
有办法做到这一点吗?
2条答案
按热度按时间f0brbegy1#
如果您定义了默认值 after adding,则列现有行将不会更新。
Online example
rlcwz9us2#
重写整个表所需的时间(和停机时间)
从postgres 11开始,postgres在添加具有 * 非易失性 * 默认值的列时实际上不需要重写表(例如不是
1
或current_timestamp
,但不是random()
),它将只存储目录中的默认值,并将其用于没有列值的行。如果旧行被更新,它将利用这个机会内联缺少的默认值。同样,如果整个表被重写(VACUUM FULL)。