Есть ли альтернатива временным таблицам в PostgreSQL для хранения и управления наборами результатов? - PullRequest
2 голосов
/ 30 апреля 2019

В функции plpgsql мне нужно хранить результирующий набор оператора select и выполнять множество последующих запросов и манипуляций над этим набором.

Я читал о временных таблицах в PostgreSQL, но эти таблицы видны в области сеанса / транзакции, в то время как мне нужно, чтобы моя таблица (или любая структура данных, содержащая набор результатов) была видна локально и существовала только внутри функции, чтобы каждый вызов функции может иметь свою собственную копию (таблица / структура данных)

Мне просто нужна структура, похожая на таблицу, для хранения результирующего набора select в вызове функции вместо временных таблиц. Есть ли такая вещь?

1 Ответ

0 голосов
/ 01 мая 2019

Параллельные сеансы могут иметь свои собственные (локальные) временные таблицы с одинаковыми именами. Вот пример функции, которая не делает ничего мудрого, но создает временную таблицу, возвращает ее данные и удаляет таблицу при выходе:

create or replace function my_function()
returns table (id int, str text)
language plpgsql as $$
begin

    create temp table my_temp_table as
    select i as id, i::text as str
    from generate_series(1, 3) i;

    return query
    select *
    from my_temp_table;

    drop table my_temp_table;
end $$;

Функция может безопасно выполняться в параллельных сеансах.

drop table if exists... в начале функции - разумная альтернатива. Не забудьте использовать temp или temporary в create temp table...

...