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

PL/pgSQL中如何声明带指定列名的行字面量数组?

错误原因

你这段代码的语法错误来自两个问题:

  1. PostgreSQL 不支持 gangwei(col1, col2)[] 这种直接取表字段子集声明复合类型数组的语法
  2. PL/pgSQL 变量赋值时不能直接使用裸写的 {('fo1','bar1'),('fo2','bar2')} 数组字面量,需要用 ARRAY 构造器或者加单引号转义

可行实现方案

方案1:使用匿名RECORD数组(推荐,适配应用层生成的字面量格式)

不需要提前自定义类型,直接构造行数组,unnest时指定列名即可:

DO $$
  DECLARE
    bkgws RECORD[] := ARRAY[ROW('fo1','bar1'),ROW('fo2','bar2')];
BEGIN
  INSERT INTO gangwei (config_id, col1, col2) 
  SELECT 1, col1, col2 FROM unnest(bkgws) AS t(col1, col2);
END;$$;

如果是应用层直接生成的字符串格式数组,也可以直接转类型赋值:

DO $$
  DECLARE
    bkgws RECORD[] := '{"(fo1,bar1)","(fo2,bar2)"}'::RECORD[];
BEGIN
  INSERT INTO gangwei (config_id, col1, col2) 
  SELECT 1, col1, col2 FROM unnest(bkgws) AS t(col1, col2);
END;$$;

方案2:强类型绑定(如果需要严格校验字段格式)

如果需要和gangwei表的字段类型严格绑定,可以声明为gangwei表类型数组,缺省字段自动取NULL:

DO $$
  DECLARE
    bkgws gangwei[] := ARRAY[
      (NULL, NULL, 'fo1','bar1')::gangwei,
      (NULL, NULL, 'fo2','bar2')::gangwei
    ];
BEGIN
  INSERT INTO gangwei (config_id, col1, col2) 
  SELECT 1, col1, col2 FROM unnest(bkgws);
END;$$;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:54:01