我有用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 示例