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

如何手动创建PostgreSQL中SETOF <sometype>类型的值?

如何手动创建PostgreSQL的SETOF 类型值?

首先明确:SETOF <sometype> 本质是表示一组(多行)类型的实例,它并非单一的可存储复合类型,而是用于声明函数返回多行结果的语法。手动生成这类结果,核心是构造符合目标类型的多行数据集,以下是几种实用方式:

1. 用VALUES子句直接生成多行

这是最直观的方式,直接构造多行目标类型数据:

  • 生成SETOF INT:
SELECT * FROM VALUES (1), (2), (3) AS t(val);
  • 生成自定义行类型的SETOF(先定义类型):
-- 先创建自定义行类型
CREATE TYPE person AS (id INT, name TEXT, age INT);

-- 生成SETOF person
SELECT * FROM VALUES (1, 'John', 27), (2, 'Jane', 25) AS t(p);

2. 用UNNEST展开数组得到多行

如果已有目标类型的数组,可通过UNNEST函数将数组转换为SETOF结果:

  • 从数组生成SETOF INT:
SELECT UNNEST(ARRAY[1,2,3]);
  • 从自定义类型数组生成SETOF person:
SELECT UNNEST(ARRAY[ROW(1,'John',27)::person, ROW(2,'Jane',25)::person]);

3. 自定义极简函数返回SETOF

如果需要复用这类数据集,可以写一个简单函数直接返回SETOF结果:

CREATE FUNCTION get_persons() RETURNS SETOF person AS $$
SELECT * FROM VALUES (1, 'John', 27), (2, 'Jane', 25) AS t(p);
$$ LANGUAGE sql;

-- 调用函数得到SETOF person结果
SELECT * FROM get_persons();

内容的提问来源于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 17:32:38