使用for循环postgresql创建表

使用for循环postgresql创建表,postgresql,function,loops,Postgresql,Function,Loops,我有一个函数test_func(),它接受一个参数(假设参数名为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)

我有一个函数test_func(),它接受一个参数(假设参数名为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)
select * from (values (1), (2)) x
给予

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

select * from test_func(1)
select * from (values (1), (2)) x
我预计会出现以下情况:

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

您可以将函数加入到输入值中:

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

您可以将函数加入到输入值中:

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

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

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()
获取一个
整数
并生成行(输入参数=生成的行计数)。此外,它还添加了一个
text
列。对于所有输入,所有生成的记录都合并到一个结果集中

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

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()
获取一个
整数
并生成行(输入参数=生成的行计数)。此外,它还添加了一个
text
列。对于所有输入,所有生成的记录都合并到一个结果集中

你的论点的来源是什么?你到底想要什么?阵列?每个结果一行的表格?谢谢您的快速回复。我的参数源将来自子查询。test_func()将返回多行。例如,每次调用test_func()都会返回10行,如果参数X有2个输入,则会得到20行。我希望这是清楚的。那么test_func返回一个集合?它返回一个表(如果它们是相同的,请原谅)。您的参数的来源是什么?你到底想要什么?阵列?每个结果一行的表格?谢谢您的快速回复。我的参数源将来自子查询。test_func()将返回多行。例如,每次调用test_func()都会返回10行,如果参数X有2个输入,则会得到20行。我希望这是清楚的。所以test_func返回一个集合?它返回一个表(如果它们是相同的,请原谅)。您不需要在那里进行子查询:
。。。从my_表中,test_func(my_数据)mf
将正常工作fine@a_horse_with_no_name是的,我只是想演示要创建的子查询点。他写道他正在使用一个子查询。在那里你不需要子查询:
。。。从my_表中,test_func(my_数据)mf
将正常工作fine@a_horse_with_no_name是的,我只是想演示要创建的子查询点。他写道他正在使用一个子查询。它会抛出一条“输入端语法错误”的消息。@QuyVuXuan:啊,对不起。修正了输入错误,它会抛出一条“输入结束时出现语法错误”的消息。@QuyVuXuan:啊,对不起。修正了打字错误