This is a workaround based on the above suggested approach.
DECLARE
tables CURSOR FOR SELECT *
FROM information_schema.tables
whereWHERE table_schema = 'public'
ORDER BY "table_name" --presumably 'ASC'ASC
LIMIT ((selectSELECT count(*)
fromFROM information_schema.tables
whereWHERE table_schema = 'public')-1);
--Because the following prepared string starts with a 'UNION ALL',
--this completes the query string with a select starting with the last table
sql_string text := 'SELECT columnsfield1, field7, field8, "source" FROM last_table_in_the_list';' || quote_IDENT((SELECT "table_name" FROM information_schema.tables WHERE table_schema = 'public' ORDER BY "table_name" DESC LIMIT 1));
BEGIN
FOR table_record IN tables LOOP
sql_string := sql_string || '
UNION ALL
SELECT columns FROM ' || quote_IDENT(table_record."table_name");
END LOOP;
sql_string := sql_string||';';
RETURN sql_string;
--EXECUTE sql_string;
END;