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

PostgreSQL插入时如何将id列值复制到copyofid列?

问题解答

可以在单条INSERT语句中实现将生成的id值复制到copyofid列,但你之前的写法有误——因为VALUES子句里无法引用当前插入行还未生成的id值。

下面提供两种可行的单条语句实现方式:

方法一:利用序列函数+WITH子句

PostgreSQL中SERIAL类型会自动创建对应的序列(命名规则为表名_id_seq),我们可以先获取序列的下一个值,再将其同时赋值给id和copyofid:

WITH new_id AS (
    SELECT nextval('mytable_id_seq') AS id
)
INSERT INTO mytable(id, content, copyofid)
SELECT id, 'test', id FROM new_id;

方法二:使用DEFAULT结合INSERT...SELECT

如果不想手动指定序列名,也可以用DEFAULT让PostgreSQL自动生成id,同时通过currval获取刚生成的序列值(注意currval只能在当前会话已经调用过nextval的前提下使用,这里INSERT操作会自动触发nextval调用):

INSERT INTO mytable(content, copyofid)
SELECT 'test', currval('mytable_id_seq')
FROM (SELECT DEFAULT AS dummy) AS t;

你之前的语句INSERT INTO mytable(content, copyofid) VALUES("test", id);无法工作的原因是:VALUES子句中的id被解析为未定义的变量或不存在的列,此时当前插入行的id还未生成,数据库无法识别这个引用。

内容的提问来源于stack exchange,提问作者Robert C. Holland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:10:25