PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment puis-je importer un fichier JSON dans PostgreSQL ?

Vous pouvez alimenter le JSON dans une instruction SQL qui extrait les informations et les insère dans la table. Si les attributs JSON ont exactement le même nom que les colonnes du tableau, vous pouvez faire quelque chose comme ceci :

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;

De nouveaux clients seront insérés, les clients existants seront mis à jour. La partie "magique" est le json_populate_recordset(null::customer, doc) qui génère une représentation relationnelle des objets JSON.

Ce qui précède suppose une définition de table comme celle-ci :

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

Si les données sont fournies sous forme de fichier, vous devez d'abord placer ce fichier dans une table de la base de données. Quelque chose comme ça :

create unlogged table customer_import (doc json);

Téléchargez ensuite le fichier dans une seule ligne de ce tableau, par ex. en utilisant le \copy commande dans psql (ou tout ce que propose votre client SQL) :

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

Ensuite, vous pouvez utiliser la déclaration ci-dessus, supprimez simplement le CTE et utilisez la table intermédiaire :

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;