PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Mehrzeilige PostgreSQL-Updates in Node.js

Das folgende Beispiel basiert auf der Bibliothek pg-promise und ihrer Methode helpers.update:

// library initialization, usually placed in its own module:
const pgp = require('pg-promise')({
    capSQL: true // capitalize all generated SQL
});

const db = pgp(/*your connection details*/);

// records to be updated:
const updateData = [
    {id: 1, value: 1234},
    {id: 2, value: 5678},
    {id: 3, value: 91011}
];

// declare your ColumnSet once, and then reuse it:
const cs = new pgp.helpers.ColumnSet(['?id', 'value'], {table: 'fit_ratios'});

// generating the update query where it is needed:
const update = pgp.helpers.update(updateData, cs) + ' WHERE v.id = t.id';
//=> UPDATE "fit_ratios" AS t SET "value"=v."value"
//   FROM (VALUES(1,1234),(2,5678),(3,91011))
//   AS v("id","value") WHERE v.id = t.id

// executing the query:
await db.none(update);

Dieses Verfahren zum Generieren von mehrzeiligen Aktualisierungen kann wie folgt charakterisiert werden:

  • sehr schnell, da es sich auf den Typ ColumnSet stützt, der intelligentes Caching für die Abfragegenerierung implementiert
  • völlig sicher, da alle Datentypen die Abfrageformatierungs-Engine der Bibliothek durchlaufen, um sicherzustellen, dass alles korrekt formatiert und maskiert ist.
  • sehr flexibel, da erweiterte ColumnConfig-Syntax für die Spaltendefinition unterstützt wird.
  • sehr einfach zu bedienen, aufgrund der vereinfachten Schnittstelle, die von pg-promise implementiert wurde.

Beachten Sie, dass wir ? verwenden vor der Spalte id um anzuzeigen, dass die Spalte Teil der Bedingung ist, aber nicht aktualisiert werden soll. Die vollständige Spaltensyntax finden Sie in der Klassenstruktur Column und ColumnConfig.

Verwandte Frage:Mehrzeilige Einfügung mit pg-Promise.