sql >> Databáze >  >> RDS >> PostgreSQL

Vkládání více záznamů pomocí pg-promise

Jsem autorem pg-promise .

Existují dva způsoby, jak vložit více záznamů. První a nejtypičtější způsob je prostřednictvím transakce, abyste se ujistili, že jsou všechny záznamy vloženy správně, nebo žádný z nich.

S pg-promise provádí se následujícím způsobem:

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
    });

Zahájíte transakci metodou tx a poté vytvořte všechny INSERT dotaz sliby a poté je všechny vyřešte jako dávku .

Druhým přístupem je zřetězení všech vložených hodnot do jednoho INSERT dotaz, který podrobně vysvětluji v Zvýšení výkonu . Viz také:Víceřádková vložka s pg-promise .

Další příklady viz Úkoly a Transakce .

Přidání

Stojí za zmínku, že ve většině případů nevkládáme záznam id , raději si jej nechte vygenerovat automaticky. Někdy chceme získat nové ID zpět a v jiných případech je nám to jedno.

Výše uvedené příklady řeší pole null -s, protože dávka řeší se polem jednotlivých výsledků a metodou žádná vyřeší pomocí null , podle jeho API.

Předpokládejme, že chceme vygenerovat nová ID a že je chceme všechna získat zpět. Abychom toho dosáhli, změnili bychom kód na následující:

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
    });

tj. změny jsou:

  • nevkládáme id hodnoty
  • nahrazujeme metodu žádnou s jedním , abyste získali jeden řádek/objekt z každé vložky
  • připojíme RETURNING id na dotaz, abyste získali hodnotu
  • přidáváme a => +a.id k provedení automatické transformace řádků. Viz také pg-promise vrací celá čísla jako řetězce abyste pochopili, co znamená + je pro.

AKTUALIZACE-1

Pro vysoce výkonný přístup pomocí jediného INSERT dotaz viz Víceřádkové vložení s pg-promise .

AKTUALIZACE-2

Článek, který si musíte přečíst:Importy dat .




  1. Plnění modálního obsahu pomocí PHP a AJAX?

  2. jak pracovat s rekurzivním dotazem v MySql?

  3. Příklady DATEPART() v SQL Server

  4. Výběr záznamů mezi dvěma daty