You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单条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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:05:26