我正在尝试使用带有 pg 扩展名的 node.js(版本 0.5.4)在 postgres 数据库中进行插入或更新。
到目前为止,我有这个代码:(...)
client.query({
text: "update users set is_active = 0, ip = $1 where id=$2",
values: [ip,id]
}, function(u_err, u_result){
debug(socket_id,"update query result: ",u_result);
debug(socket_id,"update query error: ",u_err);
date_now = new Date();
var month = date_now.getMonth() + 1;
if(!u_err){
client.query({
text: 'insert into users (id,first_name,last_name,is_active,ip,date_joined) values' +
'($1,$2,$3,$4,$5,$6)',
values: [
result.id,
result.first_name,
result.last_name,
1,
ip,
date_now.getFullYear() + "-" + month + "-" + date_now.getDate() + " " + date_now.getHours() + ":" + date_now.getMinutes() + ":" + date_now.getSeconds()
]
}, function(i_err, i_result){
debug(socket_id,"insert query result: ",i_result);
debug(socket_id,"insert query error: ",i_err);
});
}
});
问题是,尽管两个查询都有效,但问题总是同时运行,而不是仅在更新失败时运行插入函数。
代码输出中的调试功能类似于:
更新
Object { type="update query result: ", debug_value={...}}
home (linha 56)
Object { type="update query error: ", debug_value=null}
home (linha 56)
Object { type="insert query result: "}
home (linha 56)
Object { type="insert query error: ", debug_value={...}}
插入
Object { type="update query result: ", debug_value={...}}
home (linha 56)
Object { type="update query error: ", debug_value=null}
home (linha 56)
Object { type="insert query result: ", debug_value={...}}
home (linha 56)
Object { type="insert query error: ", debug_value=null}
** 编辑 **
来自 node-postgres 开发人员的回答:
可以检索受插入和更新影响的行数。它没有在本机绑定中完全实现,但在纯 javascript 版本中确实有效。我将在接下来的一两周内完成这项工作。同时使用纯 javascript 版本并在这里查看:
https://github.com/brianc/node-postgres/blob/master/test/integration/client/result-metadata-tests.js
** 结束编辑 **
任何人都可以帮忙吗?