Создать таблицу с для цикла postgresql - PullRequest
0 голосов
/ 01 июля 2019

У меня есть функция 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 ]

1 голос
/ 01 июля 2019

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.Для всех входных данных все сгенерированные записи объединяются в один набор результатов.

1 голос
/ 01 июля 2019

Вы можете присоединить свою функцию к вводимым значениям:

select f.* 
from (
  values (1), (2)
) as x(id) 
   cross join lateral test_func(x.id) as f;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...