Per automatizzare questo, hai bisogno di SQL dinamico
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$;
Chiama:
SELECT * FROM f_multi_select();
Supponendo che tutte le tabelle condividano lo stesso tipo di riga, quindi possiamo sceglierne una qualsiasi per definire il tipo di ritorno della funzione.
Ho inserito una sottoquery con ORDER BY
- nel caso in cui l'ordine delle tabelle sia significativo.
Correlati:
- Restituisce le righe SETOF dalla funzione PostgreSQL
- Nome tabella come Parametro della funzione PostgreSQL