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

PostgreSQL中未知字段时克隆记录并修改指定字段的实现方法

克隆PostgreSQL表记录并修改指定字段(测试数据生成)

嘿,我猜你是已经写出了查询语句,但还没搞定把生成的克隆记录实际插入到表中对吧?毕竟光用SELECT只能看到结果,没法真正生成测试数据~

先确认一下你的基础思路是对的:json_populate_record确实能帮你基于原有记录生成新的记录对象,再通过json_object替换指定字段的值。不过要把这个结果变成表中的实际数据,需要把它嵌套进INSERT语句里。

单条克隆记录插入

直接用INSERT + SELECT的组合就能搞定,这里给你调整后的完整语句:

INSERT INTO my_table
SELECT json_populate_record(null::my_table, json_build_object('id_table', 2000))
FROM my_table
WHERE id_table = 1;
  • 这里用null::my_table来指定要生成的记录类型和表结构匹配,比你原来的my_table写法更规范;
  • json_build_object比json_object(ARRAY[...]的写法更直观,当然你原来的写法也能正常运行,只是可读性稍差一点。

执行这条语句后,你的my_table里就会多出一条和id=1完全一致,仅id_table字段为2000的记录了。

批量生成测试数据

如果需要一次性生成多条不同的克隆记录(比如造10条测试数据),可以结合generate_series来自动生成不同的字段值:

INSERT INTO my_table
SELECT json_populate_record(null::my_table, json_build_object('id_table', 2000 + s))
FROM my_table, generate_series(1, 10) s
WHERE id_table = 1;

这条语句会生成id_table从2001到2010的10条克隆记录,完美满足批量造测试假数据的需求。

补充:如果表有自增主键

要是你的id_table是自增类型(比如serial或identity),那其实不需要手动指定值,直接排除这个字段,用常规的INSERT SELECT就能克隆:

INSERT INTO my_table (column1, column2, column3) -- 列出除自增id外的所有字段
SELECT column1, column2, column3
FROM my_table
WHERE id_table = 1;

不过你的场景是要主动修改指定字段,所以前面的json方法更贴合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:07:46