За да автоматизирате това, имате нужда от динамичен SQL
CREATE OR REPLACE FUNCTION f_multi_select()
RETURNS SETOF table1
LANGUAGE plpgsql AS
$func$
BEGIN
RETURN QUERY EXECUTE
(
SELECT string_agg(format('SELECT * FROM %I', tbl), ' UNION ALL ')
FROM (SELECT tbl FROM tablenames ORDER BY id) sub
);
END
$func$;
Обаждане:
SELECT * FROM f_multi_select();
Ако приемем, че всички таблици споделят един и същ тип ред - така че можем да изберем всеки, за да дефинираме типа на връщане на функцията.
Пуснах подзаявка с ORDER BY
- в случай, че редът на таблиците е смислен.
Свързани:
- Връща SETOF редове от функцията на PostgreSQL
- Името на таблицата като Параметър на функцията PostgreSQL