使用for循环PostgreSQL创建表

时间:2019-07-01 09:10:13

标签: postgresql function loops

我有一个函数test_func(),它接受1个参数(假设参数名称为X)并返回一个表。现在,我有了一个输入列表(来自子查询),这些输入要传递给参数X并在表中收集所有调用结果。

在Python中,我会做类似

的操作
# create empty list
all_results = []

for argument in (1,2,3):
    result = test_func(argument)

# Collect the result
all_results.append(result)

return all_results

如何在Postgresql中做同样的事情?

谢谢。


为示例起见,我的test_func(X)接受1个参数,并吐出一个包含3列的表。 col1的值为X,col2的值为X + 1,col3的值为X + 3。例如:

select * from test_func(1)

给予

|col1|col2|col3|
----------------
| 1  | 2  | 3  |
----------------

我的参数列表将是子查询的结果,例如:

select * from (values (1), (2)) x

我希望这样:

|col1|col2|col3|
----------------
| 1  | 2  | 3  |
----------------
| 2  | 3  | 4  |
----------------

2 个答案:

答案 0 :(得分:1)

您可以将函数连接到输入值:

select f.* 
from (
  values (1), (2)
) as x(id) 
   cross join lateral test_func(x.id) as f;

答案 1 :(得分:1)

demo:db<>fiddle

这会为您提供所有结果的结果列表:

SELECT 
    mt.my_data as input,
    tf.*
FROM
    (SELECT * FROM my_table) mt,  -- input data from a subquery
    test_func(my_data) tf         -- calling every data set as argument

在小提琴中,test_func()得到一个integer并生成行(输入参数=生成的行数)。此外,它添加了一个text列。对于所有输入,所有生成的记录都合并为一个结果集。