sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo puedo importar un archivo JSON a PostgreSQL?

Puede introducir el JSON en una instrucción SQL que extrae la información y la inserta en la tabla. Si los atributos JSON tienen exactamente el mismo nombre que las columnas de la tabla, puede hacer algo como esto:

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;

Se insertarán nuevos clientes, se actualizarán los existentes. La parte "mágica" es json_populate_recordset(null::customer, doc) que genera una representación relacional de los objetos JSON.

Lo anterior asume una definición de tabla como esta:

create table customer 
(
  id        integer primary key,
  name      text not null,
  comment   text
);

Si los datos se proporcionan como un archivo, primero debe colocar ese archivo en alguna tabla de la base de datos. Algo como esto:

create unlogged table customer_import (doc json);

Luego cargue el archivo en una sola fila de esa tabla, p. usando el \copy comando en psql (o lo que sea que ofrezca su cliente SQL):

\copy customer_import from 'customers.json' ....

Luego puede usar la declaración anterior, simplemente elimine el CTE y use la tabla de etapas:

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;