sql >> Database >  >> RDS >> PostgreSQL

Hoe kan ik een JSON-bestand importeren in PostgreSQL?

U kunt de JSON invoeren in een SQL-instructie die de informatie extraheert en in de tabel invoegt. Als de JSON-attributen exact dezelfde naam hebben als de tabelkolommen, kunt u zoiets als dit doen:

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;

Nieuwe klanten worden toegevoegd, bestaande worden bijgewerkt. Het "magische" deel is de json_populate_recordset(null::customer, doc) die een relationele weergave van de JSON-objecten genereert.

Het bovenstaande gaat uit van een tabeldefinitie zoals deze:

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

Als de gegevens als een bestand worden verstrekt, moet u dat bestand eerst in een tabel in de database plaatsen. Zoiets als dit:

create unlogged table customer_import (doc json);

Upload het bestand vervolgens naar een enkele rij van die tabel, b.v. met behulp van de \copy commando in psql (of wat uw SQL-client ook aanbiedt):

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

Dan kunt u de bovenstaande verklaring gebruiken, verwijder gewoon de CTE en gebruik de staging-tabel:

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;


  1. Meerdere rijen met volgorde invoegen in Oracle

  2. PostgreSQL 12:Foreign Keys en gepartitioneerde tabellen

  3. Retourneer een gegroepeerde lijst met voorvallen met behulp van Rails en PostgreSQL

  4. Oracle Sequence-waarden zijn niet geordend