2017-07-18 2 views
0

Je tente d'insérer un tableau de JSON dans Postgres. Tout semble fonctionner correctement (la table est créée), mais aucune donnée n'est insérée et aucune erreur n'est donnée. J'utilise la méthode async/await pour les transactions, mais je ne peux pas comprendre ce qui échoue.Insérer JSON échoue nœud 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)) 

EDIT Mise à jour le code pour tenir compte des manquants INSERT, maintenant des lignes insérera, mais pas toutes les données.

+2

Et où est votre 'INSERT'? Vous n'ajoutez rien dans la table. –

+0

'json_populate_recordset' ne fait-il pas l'insertion pour vous? Je suppose que j'étais sous l'impression qu'il serait basé sur le postgres [docs] (https://www.postgresql.org/docs/current/static/functions-json.html) –

+1

Vous êtes malentendu. Il remplit le résultat du SELECT, il n'a rien à voir avec l'insertion d'enregistrements. –

Répondre

0

L'INSERT a échoué parce que JSONB est sensible à la casse en ce qui concerne les noms de colonnes. J'avais les noms de colonne Upper Case dans les données val et ils auraient dû être plus bas. Merci à @ vitaly-t pour avoir signalé l'INSERT manquant dans mon post original.