PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Aggiornamenti su più righe PostgreSQL in Node.js

L'esempio seguente è basato sulla libreria pg-promise e sul suo metodo 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);

Questo metodo di generazione di aggiornamenti su più righe può essere caratterizzato come:

  • molto veloce, poiché si basa sul tipo ColumnSet che implementa la memorizzazione nella cache intelligente per la generazione di query
  • completamente sicuro, poiché tutti i tipi di dati stanno passando attraverso il motore di formattazione delle query della libreria per assicurarsi che tutto sia formattato e sottoposto a escape correttamente.
  • molto flessibile, grazie alla sintassi ColumnConfig avanzata supportata per la definizione delle colonne.
  • molto facile da usare, grazie all'interfaccia semplificata implementata da pg-promise.

Nota che utilizziamo ? davanti alla colonna id per indicare che la colonna fa parte della condizione, ma non da aggiornare. Per la sintassi completa delle colonne, vedere la struttura della classe Column e ColumnConfig.

Domanda correlata:inserto a più righe con pg-promise.