Estou executando o postgresql 9.3.4. Tenho uma tabela com 3 campos:
id name addr
--- ---- ----
1 n1 ad1
2 n2 ad2
...
Eu preciso mover os dados para uma nova tabela com campos como:
id data
--- ----
1 {'name': 'n1', 'addr': 'ad1'}
2 {'name': 'n2', 'addr': 'ad2'}
...
row_to_json
não é a solução para mim, pois SELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) t
contribui id
para o resultado também. Existe uma maneira de escolher os campos que preciso (nome e endereço) no meu campo de dados?
Mais simples com o operador
jsonb - text → jsonb
para remover uma única chave no Postgres 9.5 ou posterior - depois de converter a linha inteira comto_jsonb()
. (Transmita o resultado parajson
se você não quiserjsonb
.)No Postgres 10 ou posterior, você também pode remover uma matriz inteira de chaves com o operador
jsonb - text[] → jsonb
.Há também uma opção melhor
json_build_object()
no Postgres 9.4 ou posterior:Mas existe uma maneira ainda mais simples desde o Postgres 9.3 :
to_json()
é basicamente o mesmo querow_to_json()
.Encontre mais algumas variantes de sintaxe no violino.
db<>fiddle aqui
Antigo sqlfiddle (Postgres 9.6)
Respostas relacionadas:
Selecione colunas dentro de json_agg
Retornar como array de objetos JSON no SQL (Postgres)
Retornar o número total de linhas e dados selecionados (agregados)
Encontrei a resposta neste link :