如何手动创建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
相关产品推荐
相关产品推荐

