Вставьте массив объектов JSON в postgreSQL, используя ключи объектов в качестве имен столбцов - PullRequest
0 голосов
/ 10 октября 2018

У меня есть приложение, написанное на Javascript, которое использует базу данных postgreSQL (9.6) для хранения данных.Есть ли способ, как вставить объект Javascript непосредственно в БД?

Я создал этот пример таблицы:

CREATE TABLE people (
  "uuid" uuid PRIMARY KEY,
  "name" text NOT NULL,
  "phone" number
); 

Объект Javascript в приложении:

{
  uuid: 'df7c5fdc-d6b7-4b5e-ac3b-1228fac64a90',
  name: 'Martin',
  phone: 123456
}

СейчасУ меня есть массив разных людей (массив объектов выше), и мне удалось вставить его в БД следующим образом:

let uuids = people.map(p => `'${p.uuid}'`) // adding quotes, otherwise syntax error
let names = people.map(p => `'${p.name}'`)
let phones = people.map(p => `'${p.phone}'`)

INSERT INTO people (
  "uuid",
  "name",
  "phone"
)
VALUES (
  UNNEST(ARRAY[${uuids}])::uuid,
  UNNEST(ARRAY[${names}])::text,
  UNNEST(ARRAY[${phones}])::number
)

Есть ли способ сделать это более эффективно?как в монго db.collection.insertMany(array)?Кроме того, я хотел бы опустить некоторые значения и иметь их NULL, что невозможно в этом примере.

Я искал в документации PostgreSQL, и есть несколько функций для работы с json, но я не смог найти подходящих для этого.

Спасибо за помощь.

1 Ответ

0 голосов
/ 11 октября 2018

Есть возможность проверить json_to_recordset():

INSERT INTO people("uuid", name, phone)
SELECT "uuid", name, phone
FROM json_to_recordset(?) AS x("uuid" uuid, name text, phone int);

, где заполнитель должен быть связан с массивом объектов, которые вы описываете (за исключением, конечно, в надлежащем JSON).

Пример sqlfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...