PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Mises à jour multi-lignes PostgreSQL dans Node.js

L'exemple ci-dessous est basé sur la librairie pg-promise, et sa méthode 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);

Cette méthode de génération de mises à jour multi-lignes peut être caractérisée comme :

  • très rapide, car il s'appuie sur le type ColumnSet qui implémente la mise en cache intelligente pour la génération de requêtes
  • complètement sûr, car tous les types de données passent par le moteur de formatage des requêtes de la bibliothèque pour s'assurer que tout est correctement formaté et échappé.
  • très flexible, grâce à la syntaxe ColumnConfig avancée prise en charge pour la définition des colonnes.
  • très facile à utiliser, grâce à l'interface simplifiée implémentée par pg-promise.

Notez que nous utilisons ? devant la colonne id pour indiquer que la colonne fait partie de la condition, mais qu'elle ne doit pas être mise à jour. Pour la syntaxe complète des colonnes, consultez la classe Column et la structure ColumnConfig.

Question connexe :Insertion sur plusieurs lignes avec pg-promise.