2017-07-18 60 views
0

我想插入一個JSON數組到Postgres中。一切似乎都成功運行(表被創建),但沒有插入數據,也沒有給出錯誤。我正在使用異步/等待方法進行事務處理,但我無法理解失敗的原因。插入JSON失敗Node-Postgres

(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, $1::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,現在行會插入,但不是所有的數據。

+2

你的INSERT在哪裏?你沒有添加任何東西到表中。 –

+0

'json_populate_recordset'是否爲你插入?我想我的印象是基於postgres [docs](https://www.postgresql.org/docs/current/static/functions-json.html) –

+1

您的誤解。它填充了「SELECT」的結果,它與插入記錄無關。 –

回答

0

INSERT失敗,因爲JSONB對列名稱區分大小寫。我在val數據中使用了大寫字母列名,並且它們應該較低。感謝@ vitaly-t在我的原始文章中指出缺少的INSERT。