I'm new to postgres and have a database with multiple tables of the same structure. I need to select data from each table that matches certain criteria.
I could do this with a bunch of UNION
queries, but the number of tables I need to search can change over time, so I don't want to hard code it like that. I've been trying to develop a function that will loop through specific tables (they have a common naming convention) and return a table of records, but I'm not getting any results when I query the function. Function code is below:
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;
I am not getting any errors when I try to use the function, but not returning any rows:
SELECT * From internalid_formaltable_name_lookup()
Any idea where I went wrong?
internal_id
is a string? I suspect it's a numeric column? – Erwin Brandstetter Jul 7 '14 at 23:17