使用对象键作为列名将对象的 JSON 数组插入到 postgreSQL 中



我有用Javascript编写的应用程序,它使用postgreSQL (9.6( DB来存储数据。 有没有办法将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,但我找不到任何适合这个的函数。

谢谢你的帮助。

有机会测试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 示例

最新更新