2017-07-18 4 views
0

PostgresにJSONの配列を挿入しようとしています。すべてが正常に実行されたように見えますが(テーブルが作成されます)、データは挿入されず、エラーも表示されません。トランザクションにasync/awaitメソッドを使用していますが、何が失敗しているのか分かりません。JSONがノードのポストグルに失敗する

(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)) 

EDIT は、すべてのデータを、今の行が挿入されますINSERTを行方不明に対処するコードを更新しましたが、ありません。

+2

あなたの 'INSERT'はどこにありますか?あなたはテーブルに何も追加していません。 –

+0

あなたのために 'json_populate_recordset'は挿入しませんか?私はpostgres [docs](https://www.postgresql.org/docs/current/static/functions-json.html)に基づいているという印象の下にあったと思います。 –

+1

あなたは誤解しています。それは 'SELECT'の結果を取り込み、レコードを挿入することとは何の関係もありません。 –

答えて

0

JSONBは列名に関しては大文字と小文字が区別されるため、INSERTが失敗しました。私はvalデータに大文字のカラム名を持っていて、それは低くなっていたはずです。元の投稿に欠けているINSERTを指摘するための@ vitaly-tに感謝します。

関連する問題