sql >> Databáze >  >> RDS >> PostgreSQL

Jak mohu importovat soubor JSON do PostgreSQL?

JSON můžete vložit do příkazu SQL, který extrahuje informace a vloží je do tabulky. Pokud mají atributy JSON přesně stejný název jako sloupce tabulky, můžete udělat něco takového:

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;

Noví zákazníci budou vloženi, stávající budou aktualizováni. "Magická" část je json_populate_recordset(null::customer, doc) který generuje relační reprezentaci objektů JSON.

Výše uvedené předpokládá definici tabulky takto:

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

Pokud jsou data poskytnuta jako soubor, musíte tento soubor nejprve vložit do nějaké tabulky v databázi. Něco jako toto:

create unlogged table customer_import (doc json);

Poté soubor nahrajte do jednoho řádku této tabulky, např. pomocí \copy příkaz v psql (nebo cokoli, co váš SQL klient nabízí):

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

Pak můžete použít výše uvedený příkaz, stačí odstranit CTE a použít pracovní tabulku:

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. Proč potřebujeme zprostředkovatele zpráv jako RabbitMQ přes databázi jako PostgreSQL?

  2. Typ tabulky v příkladu Oracle PL SQL

  3. MySQL:Rozdělte seznam oddělený čárkami do více řádků

  4. Příklad hromadného sběru Oracle PL/SQL s výjimkami uložení