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

如何在PL/pgSQL中初始化rowtype数组?

声明并初始化PostgreSQL表行类型数组

在PostgreSQL中,你不能直接用(id=1, value='val 1')这种键值对格式构造表行类型的数组元素,需要使用行构造器并匹配表字段顺序来初始化。以下是两种可行的实现方式:

方法1:使用ROW()构造器+类型转换

通过ROW()创建行数据,再显式转换为目标表的行类型,最后组成数组:

do
$$
declare 
    rowsForTable mytable%rowtype[] := array [
        ROW(1, 'val 1')::mytable%rowtype,
        ROW(2, 'val 2')::mytable%rowtype,
        ROW(3, NULL)::mytable%rowtype  -- 未指定的字段用NULL填充
    ];
begin
    -- 可选:验证数组内容
    raise notice '%', rowsForTable;
    -- 后续插入表的示例语句
    insert into mytable select * from unnest(rowsForTable);
end;
$$ language plpgsql;

方法2:直接用表名作为行构造器

PostgreSQL支持直接使用表名作为构造函数创建行实例,语法更简洁:

do
$$
declare 
    rowsForTable mytable%rowtype[] := array [
        mytable(1, 'val 1'),
        mytable(2, 'val 2'),
        mytable(3, NULL)
    ];
begin
    -- 可选:验证数组内容
    raise notice '%', rowsForTable;
    -- 后续插入表的示例语句
    insert into mytable select * from unnest(rowsForTable);
end;
$$ language plpgsql;

注意事项

  • 行构造器的参数必须严格匹配表字段的定义顺序,如果某个字段不需要指定值,对应位置用NULL填充(比如示例中第三个元素的value字段)。
  • 虽然id是serial类型,但这里是手动赋值初始化数组;如果需要让序列自动生成id,可以去掉数组中的id值,插入时只指定value字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:52:12