Um dies zu automatisieren, benötigen Sie dynamisches 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$;
Aufruf:
SELECT * FROM f_multi_select();
Unter der Annahme, dass alle Tabellen den gleichen Zeilentyp haben, können wir jeden auswählen, um den Rückgabetyp der Funktion zu definieren.
Ich habe eine Unterabfrage mit ORDER BY
eingefügt - falls die Reihenfolge der Tabellen sinnvoll ist.
Verwandte: