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

PostgreSQL中如何手动创建RECORD类型的行数组?

如何在PostgreSQL中手动创建行数组?

PostgreSQL不支持直接将字符串转换为匿名RECORD类型(这就是你遇到ERROR: input of anonymous composite types is not implemented错误的原因),必须指定明确的复合类型才能构造行数组,以下是几种可行方法:

方法1:创建自定义复合类型

先定义一个有明确结构的复合类型,再用它来构造数组:

-- 创建自定义复合类型
CREATE TYPE person AS (first_name text, last_name text);

-- 构造行数组
SELECT ARRAY['(John,Smith)'::person, '(David,Miller)'::person];

也可以用ROW()构造器直接生成行元素,再转换为目标类型数组:

SELECT ARRAY[ROW('John', 'Smith'), ROW('David', 'Miller')]::person[];

方法2:利用现有表的行类型

如果数据库中已有对应结构的表(比如名为person的表,包含first_name和last_name字段),可以直接复用表的行类型:

SELECT ARRAY[ROW('John', 'Smith'), ROW('David', 'Miller')]::person[];

方法3:临时复合类型(会话级)

如果不想创建永久类型,可以创建会话级的临时类型:

CREATE TEMP TYPE person AS (first_name text, last_name text);
SELECT ARRAY[ROW('John', 'Smith'), ROW('David', 'Miller')]::person[];

为什么原方法失败?

RECORD是匿名复合类型,PostgreSQL无法从字符串'(John,Smith)'推断出它的字段结构和类型,因此必须指定一个有明确定义的复合类型(自定义类型或表行类型),才能完成字符串到行类型的转换,进而构造行数组。

内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:49:56