PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como UNION uma lista de tabelas recuperadas de outra tabela com uma única consulta?


Para automatizar isso, você precisa de 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$;

Ligar:
SELECT * FROM f_multi_select();

Assumindo que todas as tabelas compartilham o mesmo tipo de linha - então podemos escolher qualquer um para definir o tipo de retorno da função.

Eu joguei uma subconsulta com ORDER BY - caso a ordem das tabelas seja significativa.

Relacionado: