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

PostgreSQL:如何为随机表SQL新增主键ID和自动插入的时间戳列

实现方案(PostgreSQL环境,适配你提供的原SQL语法)

已有表新增字段方案

如果你已经执行完原建表语句生成了带10条数据的foo表,按以下两步执行即可:

1. 新增col0主键唯一键

  • PostgreSQL 10及以上版本(推荐):
ALTER TABLE foo ADD COLUMN col0 INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY;

执行后会自动为已存在的10行数据填充连续的唯一整数值,自带非空、唯一约束。

  • PostgreSQL 10以下版本:
ALTER TABLE foo ADD COLUMN col0 SERIAL PRIMARY KEY;

效果和上面的标识列一致,底层会自动创建关联序列完成自增赋值。

2. 新增col5自动填充创建时间字段

ALTER TABLE foo ADD COLUMN col5 TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
  • 已存在的10行数据的col5会自动填充执行该ALTER语句时的系统时间
  • 后续新增行时如果不主动指定col5的值,会自动插入当前行的创建时间,更新其他字段时col5的值不会改变

效果验证

执行以下测试插入语句,可验证功能是否正常:

-- 插入新行时无需指定col0和col5
INSERT INTO foo (col1, col2, col3, col4)
VALUES (random(), left(md5(random()::text), 10), md5(random()::text), left(md5(random()::text), 4));
-- 查询全表数据,确认新行的col0自动生成唯一值、col5自动填充插入时间
SELECT * FROM foo;

(可选)建表时直接包含目标字段方案

如果还没执行原建表语句,可以直接用以下语句一次性创建符合要求的表,无需后续ALTER修改:

CREATE TABLE foo (
    col0 INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    col1 NUMERIC,
    col2 TEXT,
    col3 TEXT,
    col4 TEXT,
    col5 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) AS 
SELECT 
    random() as col1, 
    left(md5(i::text), 10) as col2,
    md5(random()::text) as col3,
    left(md5(random()::text), 4) as col4
FROM generate_series(1,10) s(i);

内容的提问来源于stack exchange,提问作者Santhosh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:30:06