Função para percorrer e selecionar dados de várias tabelas
Eu sou novo no Postgres e tenho um banco de dados com várias tabelas da mesma estrutura. Preciso selecionar dados de cada tabela que corresponda a determinados critérios.
Eu poderia fazer isso com um monte deUNION
consultas, mas o número de tabelas que preciso pesquisar pode mudar ao longo do tempo, portanto, não quero codificá-lo dessa maneira. Eu tenho tentado desenvolver uma função que percorrerá tabelas específicas (elas possuem uma convenção de nomenclatura comum) e retornará uma tabela de registros, mas não estou obtendo nenhum resultado ao consultar a função. O código da função está abaixo:
CREATE OR REPLACE FUNCTION public.internalid_formaltable_name_lookup()
RETURNS TABLE(natural_id text, name text, natural_id_numeric text) AS
$BODY$
DECLARE
formal_table text;
begin
FOR formal_table IN
select table_name from information_schema.tables
where table_schema = 'public' and table_name like 'formaltable%'
LOOP
EXECUTE 'SELECT natural_id, name, natural_id_numeric
FROM ' || formal_table ||
' WHERE natural_id_numeric IN (
select natural_id_numeric from internal_idlookup
where internal_id = ''7166571'')';
RETURN NEXT;
END LOOP;
Return;
END;
$BODY$
LANGUAGE plpgsql;
Não estou recebendo nenhum erro ao tentar usar a função, mas ela não está retornando nenhuma linha:
SELECT * From internalid_formaltable_name_lookup();
Alguma idéia de onde errei?