Примерно так:
select jsonb_build_object(table_schema,
jsonb_agg(jsonb_build_object(table_name, columns))) as schema_info
from (
select t.table_schema, t.table_name,
jsonb_build_object('columns', jsonb_agg(jsonb_build_object(c.column_name, jsonb_build_object('type', c.data_type))
order by c.ordinal_position)
) as columns
from information_schema.tables t
join information_schema.columns c
on c.table_schema = t.table_schema
and c.table_name = t.table_name
where t.table_schema in ('public', 'foo', 'bar')
group by t.table_schema, t.table_name
) t1
group by table_schema;
Это вернет одно значение JSON для каждой схемы, указанной во внутреннем предложении where.Вы можете дополнительно объединить их, если хотите.Возможно, вы также захотите немного изменить поиск данных, например, включить длину столбцов VARCHAR