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

PL/pgSQL如何遍历单行内各列并逐列插入t2表

实现方案

直接用PostgreSQL内置的JSON处理函数即可实现,不需要手动逐列编写插入语句,完整代码如下:

DECLARE
    a t1%ROWTYPE;
BEGIN 
    SELECT * INTO a FROM t1 WHERE id=<some_id>;

    INSERT INTO t2 (column_name, value)
    SELECT
        key AS column_name,
        value
    FROM jsonb_each(to_jsonb(a));
END;

核心逻辑说明

  • to_jsonb(a):将ROWTYPE类型的行变量a自动转换为JSONB对象,键为t1表的列名,值为对应列自动转换后的合法JSONB值,和t2表的value字段类型完全匹配。
  • jsonb_each():表函数,会把传入的JSONB对象拆分为多行结果,返回的key对应原JSON的键(即t1的列名),value对应原JSON的值,和t2表字段一一对应,可直接插入。

扩展说明

  • 该方案不需要硬编码t1的列名,后续t1表增减字段时代码无需修改,会自动适配所有列。
  • 类型转换由数据库自动完成,支持数值、字符串、时间等所有PostgreSQL原生类型到JSONB的转换,不会出现类型不匹配错误。
  • 如果需要过滤特定列不插入,直接加WHERE条件即可,例如排除id列:
INSERT INTO t2 (column_name, value)
SELECT
    key AS column_name,
    value
FROM jsonb_each(to_jsonb(a))
WHERE key != 'id';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:21:18