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