sql >> Base de Datos >  >> RDS >> PostgreSQL

Actualizaciones de varias filas de PostgreSQL en Node.js

El siguiente ejemplo se basa en la biblioteca pg-promise y su método 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);

Este método de generar actualizaciones de varias filas se puede caracterizar como:

  • muy rápido, ya que se basa en el tipo ColumnSet que implementa el almacenamiento en caché inteligente para la generación de consultas
  • completamente seguro, ya que todos los tipos de datos pasan por el motor de formato de consulta de la biblioteca para asegurarse de que todo esté formateado y escapado correctamente.
  • muy flexible, debido a la sintaxis avanzada de ColumnConfig compatible con la definición de columnas.
  • muy fácil de usar, gracias a la interfaz simplificada implementada por pg-promise.

Tenga en cuenta que usamos ? delante de la columna id para indicar que la columna es parte de la condición, pero no para ser actualizada. Para ver la sintaxis completa de las columnas, consulte la clase Column y la estructura ColumnConfig.

Pregunta relacionada:Inserción de varias filas con pg-promise.