For at automatisere dette har du brug for dynamisk 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$;
Ring til:
SELECT * FROM f_multi_select();
Forudsat at alle tabeller deler den samme rækketype - så vi kan vælge en hvilken som helst for at definere funktionens returtype.
Jeg sendte en underforespørgsel med ORDER BY
- hvis rækkefølgen af tabeller er meningsfuld.
Relateret: