如何用单条SQL语句为新列设新行默认值且现有行保持NULL?
单条SQL实现添加默认值仅作用于新行的列
要实现给表foo添加新列bar,让现有行该列值为NULL、新插入行自动用clock_timestamp()作为默认值的需求,你可以把两个修改操作合并到同一条ALTER TABLE语句里,用逗号分隔多个动作即可:
ALTER TABLE foo ADD COLUMN bar timestamp NULL, ALTER bar SET DEFAULT clock_timestamp();
这条语句会先添加一个允许NULL的列(现有行自动填充NULL),紧接着为该列设置默认值,后续新插入的行就会自动套用这个默认值,效果和你分开执行两条语句完全一致,但只需要发送一次SQL请求。
你之前使用的ALTER TABLE foo ADD COLUMN bar timestamp NULL DEFAULT clock_timestamp()会给所有现有行也设置默认值,是因为PostgreSQL在添加带默认值的列时,会自动将现有行的该列值填充为默认值,而拆分(或合并到同一条语句的两个步骤)操作就能避开这个行为。
内容的提问来源于stack exchange,提问作者dafie
相关产品推荐
相关产品推荐

