【发布时间】:2011-12-16 03:31:35
【问题描述】:
我正在尝试使用带有 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
** 结束编辑 **
谁能帮忙?
【问题讨论】:
标签: postgresql node.js upsert pg