插入 JSON 失败 Node-Postgres
Insert JSON Fails Node-Postgres
我正在尝试将 JSON 的数组插入到 Postgres 中。 运行 看来一切都成功了(创建了 table),但是没有插入数据,也没有给出错误。我正在使用 async/await 交易方法,但我无法理解失败的原因。
(async() => {
const client = await pool.connect()
let val= [
{"table_pk":1,"NAME":"my Great Name","ROLE":"name1"},
{"table_pk":2,"NAME":"new Name","ROLE":"name1"},
{"table_pk":3,"NAME":"someone's funny name","ROLE":"name1"}
]
try {
await client.query('BEGIN');
await client.query('DROP TABLE IF EXISTS myTable')
await client.query(`CREATE TABLE myTable(table_pk INTEGER PRIMARY KEY, name TEXT, role TEXT)`)
await client.query(`INSERT INTO myTable SELECT * FROM jsonb_populate_recordset(NULL::myTable, ::jsonb)`,[JSON.stringify(val)]);
await client.query('COMMIT');
}
catch (e) {
await client.query('ROLLBACK');
throw e
}
finally {
client.release();
}
})().catch(e => console.error(e.stack))
编辑
更新了代码以解决缺少的 INSERT,现在将插入行,但不是所有数据。
INSERT 失败,因为 JSONB 在涉及列名时区分大小写。我在 val 数据中有大写列名称,它们应该更小。感谢@vitaly-t 指出我原来 post.
中缺少的 INSERT
我正在尝试将 JSON 的数组插入到 Postgres 中。 运行 看来一切都成功了(创建了 table),但是没有插入数据,也没有给出错误。我正在使用 async/await 交易方法,但我无法理解失败的原因。
(async() => {
const client = await pool.connect()
let val= [
{"table_pk":1,"NAME":"my Great Name","ROLE":"name1"},
{"table_pk":2,"NAME":"new Name","ROLE":"name1"},
{"table_pk":3,"NAME":"someone's funny name","ROLE":"name1"}
]
try {
await client.query('BEGIN');
await client.query('DROP TABLE IF EXISTS myTable')
await client.query(`CREATE TABLE myTable(table_pk INTEGER PRIMARY KEY, name TEXT, role TEXT)`)
await client.query(`INSERT INTO myTable SELECT * FROM jsonb_populate_recordset(NULL::myTable, ::jsonb)`,[JSON.stringify(val)]);
await client.query('COMMIT');
}
catch (e) {
await client.query('ROLLBACK');
throw e
}
finally {
client.release();
}
})().catch(e => console.error(e.stack))
编辑 更新了代码以解决缺少的 INSERT,现在将插入行,但不是所有数据。
INSERT 失败,因为 JSONB 在涉及列名时区分大小写。我在 val 数据中有大写列名称,它们应该更小。感谢@vitaly-t 指出我原来 post.
中缺少的 INSERT