PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich eine JSON-Datei in PostgreSQL importieren?

Sie können den JSON in eine SQL-Anweisung einspeisen, die die Informationen extrahiert und in die Tabelle einfügt. Wenn die JSON-Attribute genau den Namen wie die Tabellenspalten haben, können Sie etwa so vorgehen:

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;

Neue Kunden werden eingefügt, bestehende werden aktualisiert. Der „magische“ Teil ist das json_populate_recordset(null::customer, doc) die eine relationale Darstellung der JSON-Objekte generiert.

Das Obige geht von einer Tabellendefinition wie dieser aus:

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

Wenn die Daten als Datei bereitgestellt werden, müssen Sie diese Datei zuerst in eine Tabelle in der Datenbank einfügen. Etwa so:

create unlogged table customer_import (doc json);

Laden Sie dann die Datei in eine einzelne Zeile dieser Tabelle hoch, z. mit \copy Befehl in psql (oder was auch immer Ihr SQL-Client anbietet):

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

Dann können Sie die obige Anweisung verwenden, entfernen Sie einfach den CTE und verwenden Sie die Staging-Tabelle:

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;