sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur kan jag importera en JSON-fil till PostgreSQL?

Du kan mata in JSON i en SQL-sats som extraherar informationen och infogar den i tabellen. Om JSON-attributen har exakt namnet som tabellkolumnerna kan du göra något så här:

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;

Nya kunder kommer att infogas, befintliga kommer att uppdateras. Den "magiska" delen är json_populate_recordset(null::customer, doc) som genererar en relationsrepresentation av JSON-objekten.

Ovanstående förutsätter en tabelldefinition som denna:

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

Om data tillhandahålls som en fil, måste du först lägga den filen i någon tabell i databasen. Något så här:

create unlogged table customer_import (doc json);

Ladda sedan upp filen till en enda rad i den tabellen, t.ex. med hjälp av \copy kommando i psql (eller vad din SQL-klient erbjuder):

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

Sedan kan du använda ovanstående uttalande, ta bara bort CTE och använd mellanställningstabellen:

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. Hur INSTR()-funktionen fungerar i MySQL

  2. SQLskills Wait Types Library visar nu SentryOne-data

  3. Hur man installerar MySQL 8 på Windows

  4. 1114 (HY000):Bordet är fullt