Estamos tentando emular um banco de dados proprietário, que possui "chaves primárias globais", com o PostgreSQL. Isso é o que gostaríamos de fazer (para muitas linhas de muitas tabelas):
select 'some_table' as table_name, t.*
from some_table t
where id = 1
union all
select 'other_table' as table_name, t.*
from other_table t
where id = 2;
Mas, claro, isso não funciona, porque cada esquema de tabela é diferente. Nosso DBA sugeriu isso:
select 'some_table' as table_name, jsonb_agg(t.*) as content
from some_table t
where id = 1
union all
select 'other_table' as table_name, jsonb_agg(t.*) as content
from other_table t
where id = 2;
O que faria isso, mas estamos preocupados com a quantidade de dados produzidos/transferidos. Basicamente, cada linha de cada tabela é retornada como um objeto JSONB contido em um único array. Agora o que nos incomoda, é a repetição dos nomes das colunas para cada linha .
Em vez disso, poderíamos retornar um array JSONB por linha, apenas com os valores, com base na ordem das colunas em cada tabela?
Você pode extrair os valores do valor JSONB e agregá-los de volta em uma matriz JSON
Mas você não pode confiar que a ordem dos elementos da matriz corresponde à ordem das colunas na tabela.
Outra alternativa (sem usar JSON) seria converter a linha inteira em um valor de texto:
A conversão de um registro em texto deve preservar a ordem das colunas conforme elas são definidas na tabela.