Om dit te automatiseren heb je dynamische SQL nodig
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$;
Bel:
SELECT * FROM f_multi_select();
Ervan uitgaande dat alle tabellen hetzelfde rijtype delen - dus we kunnen er een kiezen om het retourtype van de functie te definiëren.
Ik gooide een subquery in met ORDER BY
- voor het geval de volgorde van de tabellen zinvol is.
Gerelateerd: