Jaime Neto | desenvolvimento para web

out/17

25

Retornando JSON no PostgreSQL


Uma funcionalidade muito útil do banco de dados PostgreSQL, e que muita gente não conhece, é transformar um conjunto de dados no formato JSON. Esse formato é muito utilizado atualmente para comunicação entre serviços, alimentação de dados em grid, e várias outras funcionalidades. Alguns bancos usam funções que convertem os registros para JSON, mas o PostgreSQL tem uma forma muito mais prática, como veremos nos exemplos a seguir:

Digamos que eu queira a lista de posts de um site para ser exibida em um grid. Se fizer a query seguinte, eu terei essa lista como result set:

SELECT * FROM posts

Se eu precisar que todos os dados venham numa mesma coluna, eu ainda posso pôr o alias da tabela na lista de colunas que você deseja retornar o resultado, assim:

SELECT p FROM posts AS p

Mas se o grid precisa receber essa lista no formato JSON, então eu teria que converter os resultados antes de passar para o grid, ou posso fazer isso utilizando a função row_to_json():

SELECT row_to_json(p) FROM posts AS p

Agora vamos melhorar essa query. Eu quero fazer uma consulta normal nos posts, e quero trazer na mesma consulta os dados do usuário que cadastrou cada post numa única coluna JSON:

SELECT p.*, row_to_json(u) AS user_data
FROM posts AS p
JOIN users AS u ON u.id = p.user_id

Essa funcionalidade merece ser explorada mais afundo nos dias de hoje em que o JSON vem ganhando tanto espaço, substituindo inclusive o XML, que antes dominava essa área.

^__~

Editado em 12/07/2019

·

2 comments

  • Délio · 11 de julho de 2019 às 20:12

    Olá, vi a matéria mas deve ter ocorrido um erro de edição.

    Falta o comando row_to_json() que realiza a conversão dos dados no formato JSON.

    Exemplo:
    SELECT row_to_json(p) FROM posts AS p

    Responder

    • Admin comment by jaime · 12 de julho de 2019 às 15:05

      Sim, da forma que eu tinha usado lá são retornados todos os dados numa mesma coluna, mas não é JSON. Corrigi o texto adicionando a função row_to_json() como você sugeriu.

      Obrigado! ^__~

      Responder

Leave a Reply

<<

>>

Theme Design by devolux.nh2.me