PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como posso importar um arquivo JSON para o PostgreSQL?


Você pode alimentar o JSON em uma instrução SQL que extrai as informações e as insere na tabela. Se os atributos JSON tiverem exatamente o nome das colunas da tabela, você pode fazer algo assim:
with customer_json (doc) as (
   values 
    ('[
      {
        "id": 23635,
        "name": "Jerry Green",
        "comment": "Imported from facebook."
      },
      {
        "id": 23636,
        "name": "John Wayne",
        "comment": "Imported from facebook."
      }
    ]'::json)
)
insert into customer (id, name, comment)
select p.*
from customer_json l
  cross join lateral json_populate_recordset(null::customer, doc) as p
on conflict (id) do update 
  set name = excluded.name, 
      comment = excluded.comment;

Novos clientes serão inseridos, os existentes serão atualizados. A parte "mágica" é o json_populate_recordset(null::customer, doc) que gera uma representação relacional dos objetos JSON.

O acima assume uma definição de tabela como esta:
create table customer 
(
  id        integer primary key,
  name      text not null,
  comment   text
);

Se os dados forem fornecidos como um arquivo, você precisa primeiro colocar esse arquivo em alguma tabela do banco de dados. Algo assim:
create unlogged table customer_import (doc json);

Em seguida, carregue o arquivo em uma única linha dessa tabela, por exemplo. usando o \copy comando em psql (ou o que seu cliente SQL oferece):
\copy customer_import from 'customers.json' ....

Então você pode usar a declaração acima, basta remover o CTE e usar a tabela de teste:
insert into customer (id, name, comment)
select p.*
from customer_import l
  cross join lateral json_populate_recordset(null::customer, doc) as p
on conflict (id) do update 
  set name = excluded.name, 
      comment = excluded.comment;