Solución:
Otra forma de usar las funciones json de PostgreSQL:
client.query('INSERT INTO table (columns) ' +
'SELECT m.* FROM json_populate_recordset(null::your_custom_type, $1) AS m',
[JSON.stringify(your_json_object_array)], function(err, result) {
if(err) {
console.log(err);
} else {
console.log(result);
}
});
A continuación de este artículo: Performance Boost de la biblioteca pg-promise y su enfoque sugerido:
// Concatenates an array of objects or arrays of values, according to the template,
// to use with insert queries. Can be used either as a class type or as a function.
//
// template = formatting template string
// data = array of either objects or arrays of values
function Inserts(template, data) {
if (!(this instanceof Inserts)) {
return new Inserts(template, data);
}
this._rawDBType = true;
this.formatDBType = function () {
return data.map(d=>'(' + pgp.as.format(template, d) + ')').join(',');
};
}
Un ejemplo de cómo usarlo, exactamente como en su caso:
var users = [['John', 23], ['Mike', 30], ['David', 18]];
db.none('INSERT INTO Users(name, age) VALUES $1', Inserts('$1, $2', users))
.then(data=> {
// OK, all records have been inserted
})
.catch(error=> {
// Error, no records inserted
});
Y también funcionará con una variedad de objetos:
var users = [{name: 'John', age: 23}, {name: 'Mike', age: 30}, {name: 'David', age: 18}];
db.none('INSERT INTO Users(name, age) VALUES $1', Inserts('${name}, ${age}', users))
.then(data=> {
// OK, all records have been inserted
})
.catch(error=> {
// Error, no records inserted
});
ACTUALIZACIÓN-1
Para un enfoque de alto rendimiento a través de un solo INSERT
consulta, consulte Inserción de varias filas con pg-promise.
ACTUALIZACIÓN-2
La información aquí es bastante antigua ahora, consulte la sintaxis más reciente para el formato de tipo personalizado. Lo que solía ser _rawDBType
es ahora rawType
, y formatDBType
fue renombrado a toPostgres
.
Utilice pg-format npm como se muestra a continuación.
var format = require('pg-format');
var values = [[7, 'john22', '[email protected]', '9999999922'], [6, 'testvk', '[email protected]', '88888888888']];
client.query(format('INSERT INTO users (id, name, email, phone) VALUES %L', values),[], (err, result)=>{
console.log(err);
console.log(result);
});
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)