У меня есть следующая упрощенная функция:
CREATE OR REPLACE FUNCTION upsert(varchar, varchar, varchar) RETURNS void AS $$
BEGIN
with t1 as (
select id from table_a where $1 = a_field
), t2 as (
select id from table_a where $2 = a_field
)
insert into table_b (tba_ref, status)
values
((select id from t1), $3),
((select id from t2), $3)
on conflict on constraint uniq_constraint do
update set status =
(CASE
WHEN table_b.tba_ref = (select id from t1) THEN 'old'
WHEN table_b.tba_ref = (select id from t2) THEN 'new'
END)
;
END;
$$ language 'plpgsql';
Есть ли способ избавиться от выбранных подзапросов?Это просто упрощенный пример, который примерно отражает структуру исходного запроса.В оригинале намного больше этих двух подзапросов, и я хотел бы повысить производительность, сохранив результат один раз, а не повторяя эти запросы.