我对此感到困惑,谢谢您的时间,我试图调用一个接收json数组作为参数的postgres函数,并在执行查询时得到以下错误:
错误:绑定消息提供3个参数,但是准备好的语句“”需要1个
我使用pg进行连接查询,这是我的代码
create() {
var datajson=[];
var data=this.params.body;
if (Object.keys(data).length>1)
{
for (var i=0; i<Object.keys(data).length; i++)
{
datajson.push(data[i]);
console.log(JSON.stringify(data[i]));
}
}
var _this=this;
pg.connect(Nodal.my.Config.db.main, function(err, client, done) {
console.log('2');
if (err) {
console.log('3');
}
console.log("llamoexec"+JSON.stringify(datajson));
var query = {
// give the query a unique name
text: 'SELECT setProduct($1)',
values: datajson
}
client.query(query, function(err, result) {
console.log('4');
if (err) {
console.log('5'+err);
}
done();
});
});
}
非常感谢您的帮助
答案 0 :(得分:1)
我认为问题在于您如何调用client.query。我不熟悉您使用的方法,但这是我通常使用的方法:
let params = [ "param1", ["param2"] ]; /* array of params */
let query = "select someFunction($1::text, $2::text[])";
client.query( query, params, function (error, result) {
if (error) { /* handle */ }
else { /* do work */ }
});
在您的情况下,假设datajson旨在为字符串数组:
let params = [ datajson ];
let query = "select setProduct($1::text[])";
/* note in your case if you had intended to send in a json string as a string then instead:
let query = select setProduct($1::text);
or if you had intended to send in as json:
let query = select setProduct($1::json);
*/
client.query (query, params, function(error, result){
if (error) { /* handle it */ }
else {
console.log(result);
}
});
如您所见,params旨在成为一个数组,并按以下顺序在选择字符串中进行引用:$ 1,$ 2等...
答案 1 :(得分:0)
最终的工作功能是:
create() {
var datajson=[];
var data=this.params.body;
if (Object.keys(data).length>=1)
{
for (var i=0; i<Object.keys(data).length; i++)
{
datajson.push(data[i]);
console.log(JSON.stringify(data[i]));
}
}
var _this=this;
pg.connect(Nodal.my.Config.db.main, function(err, client, done) {
console.log('2');
if (err) {
console.log('3');
}
console.log("llamoexec"+JSON.stringify(datajson));
var query = {
// give the query a unique name
text: 'SELECT setProduct($1)',
values: datajson
}
client.query('SELECT setProduct($1)',[JSON.stringify(datajson)], function(err, result) {
console.log('4');
if (err) {
console.log('5'+err.message);
}
done();
_this.respond(result);
});
});