PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Atualizações de várias linhas do PostgreSQL no Node.js


O exemplo abaixo é baseado na biblioteca pg-promise, e seu 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 geração de atualizações de várias linhas pode ser caracterizado como:
  • muito rápido, pois depende do tipo ColumnSet que implementa o cache inteligente para geração de consultas
  • completamente seguro, pois todos os tipos de dados passam pelo mecanismo de formatação de consulta da biblioteca para garantir que tudo esteja formatado e com escape correto.
  • muito flexível, devido à sintaxe avançada de ColumnConfig compatível com a definição de colunas.
  • muito fácil de usar, devido à interface simplificada implementada pelo pg-promise.

Observe que usamos ? na frente da coluna id para indicar que a coluna faz parte da condição, mas não deve ser atualizada. Para obter a sintaxe completa da coluna, consulte a estrutura da classe Column e ColumnConfig.

Pergunta relacionada:Inserção de várias linhas com pg-promise.