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 .