sql >> Database >  >> RDS >> PostgreSQL

Meerdere records invoegen met pg-promise

Ik ben de auteur van pg-promise .

Er zijn twee manieren om meerdere records in te voegen. De eerste en meest gebruikelijke manier is via een transactie om ervoor te zorgen dat alle records correct zijn ingevoerd, of geen ervan.

Met pg-promise het gaat op de volgende manier:

db.tx(t => {
    const queries = lst.map(l => {
        return t.none('INSERT INTO table(id, key, value) VALUES(${id}, ${key}, ${value})', l);
    });
    return t.batch(queries);
})
    .then(data => {
        // SUCCESS
        // data = array of null-s
    })
    .catch(error => {
        // ERROR
    });

U start een transactie met methode tx en maak vervolgens alle INSERT vraag belooft, en los ze vervolgens allemaal op als een batch .

De tweede benadering is door alle invoegwaarden samen te voegen tot een enkele INSERT query, die ik in detail uitleg in Performance Boost . Zie ook:Invoegen met meerdere rijen met pg-promise .

Zie voor meer voorbeelden Taken en Transacties .

Toevoeging

Het is de moeite waard om erop te wijzen dat we in de meeste gevallen geen record id . invoegen , laat het liever automatisch genereren. Soms willen we de nieuwe ID's terug, en in andere gevallen maakt het ons niet uit.

De bovenstaande voorbeelden worden opgelost met een array van null -s, omdat batch lost op met een reeks individuele resultaten en methode none lost op met null , volgens de API.

Laten we aannemen dat we de nieuwe id-s willen genereren, en dat we ze allemaal terug willen krijgen. Om dit te bereiken zouden we de code als volgt wijzigen:

db.tx(t => {
    const queries = lst.map(l => {
        return t.one('INSERT INTO table(key, value) VALUES(${key}, ${value}) RETURNING id',
                       l, a => +a.id);
    });
    return t.batch(queries);
})
    .then(data => {
        // SUCCESS
        // data = array of new id-s;
    })
    .catch(error => {
        // ERROR
    });

d.w.z. de wijzigingen zijn:

  • we voegen de id niet in waarden
  • we vervangen methode geen met één , om één rij/object uit elke invoeging te krijgen
  • we voegen RETURNING id toe naar de query om de waarde te krijgen
  • we voegen a => +a.id . toe om de automatische rijtransformatie uit te voeren. Zie ook pg-promise retourneert gehele getallen als tekenreeksen om te begrijpen wat dat + is voor.

UPDATE-1

Voor een krachtige aanpak via een enkele INSERT query zie Invoegen met meerdere rijen met pg-promise .

UPDATE-2

Een artikel dat je gelezen moet hebben:Gegevensimport .




  1. php-script aanroepen met C# (Unity)

  2. Hoe automatisch verhogen binnen een subset van de tabel MYSQL

  3. Matrices sorteren op datum

  4. PostgreSQL - Statistische gegevens verkrijgen