Para automatizar esto, necesita SQL dinámico
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$;
Llamar:
SELECT * FROM f_multi_select();
Suponiendo que todas las tablas comparten el mismo tipo de fila, podemos elegir cualquiera para definir el tipo de retorno de la función.
Lancé una subconsulta con ORDER BY
- en caso de que el orden de las tablas sea significativo.
Relacionado:
- Devolver filas SETOF desde la función PostgreSQL
- Nombre de tabla como Parámetro de función de PostgreSQL