PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak mogę zaimportować plik JSON do PostgreSQL?

Możesz podać kod JSON do instrukcji SQL, która wyodrębnia informacje i wstawia je do tabeli. Jeśli atrybuty JSON mają dokładnie taką samą nazwę jak kolumny tabeli, możesz zrobić coś takiego:

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;

Nowi klienci zostaną wprowadzeni, dotychczasowi zostaną zaktualizowani. Część „magiczna” to json_populate_recordset(null::customer, doc) który generuje relacyjną reprezentację obiektów JSON.

Powyższe zakłada taką definicję tabeli:

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

Jeśli dane są dostarczane jako plik, musisz najpierw umieścić ten plik w jakiejś tabeli w bazie danych. Coś takiego:

create unlogged table customer_import (doc json);

Następnie wgraj plik do jednego wiersza tej tabeli, np. używając \copy polecenie w psql (lub cokolwiek oferuje klient SQL):

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

Następnie możesz użyć powyższego oświadczenia, po prostu usuń CTE i użyj tabeli pomostowej:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można po prostu użyć nazwy tabeli PostgreSQL (relacja nie istnieje)

  2. Jak przełączać bazy danych w postgresie?

  3. Kilka obszarów ulepszeń w PostgreSQL 9.4

  4. Literały łańcuchowe i znaki ucieczki w postgresql

  5. kursor.execute(WSTAW WARTOŚCI im_entry.test (+entrym+) ('+p+');)