sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL-uppdateringar med flera rader i Node.js

Exemplet nedan är baserat på biblioteket pg-promise och dess metod 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);

Denna metod för att generera flerradsuppdateringar kan karakteriseras som:

  • mycket snabbt, eftersom det är beroende av typen ColumnSet som implementerar smart cachelagring för frågegenerering
  • helt säkert, eftersom alla datatyper går igenom bibliotekets frågeformateringsmotor för att se till att allt är formaterat och escaped korrekt.
  • mycket flexibel, på grund av avancerad ColumnConfig-syntax som stöds för kolumndefinitionen.
  • mycket lätt att använda, tack vare det förenklade gränssnittet implementerat av pg-promise.

Observera att vi använder ? framför kolumnen id för att indikera att kolumnen är en del av villkoret, men inte för att uppdateras. För fullständig kolumnsyntax, se klass Column och ColumnConfig struktur.

Relaterad fråga:Multi-row insert med pg-promise.



  1. Använd FILEGROUP_ID() för att returnera en filgrupps ID i SQL Server

  2. Returnera en procentandel av en resultatuppsättning i SQL Server

  3. Oracle Datatyper

  4. Gästanvändarlösenord i 11i/R12