J'essaye de faire une insertion ou une mise à jour dans une base de données postgres en utilisant node.js avec l'extension pg (version 0.5.4).Upsert dans Postgres utilisant node.js
Jusqu'à présent, j'ai ce code: (...)
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);
});
}
});
Le problème est que, bien que les deux requêtes fonctionnent le problème est toujours en cours d'exécution à la fois au lieu de fonctionner la fonction d'insertion si la mise à jour échoue .
Les fonctions de débogage en sortie de code quelque chose comme:
MISE À JOUR
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={...}}
Insérer
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}
** EDIT **
ANSWE R FROM développeur noeud-postgres:
Il est possible de récupérer le nombre de lignes affectées par une insertion et la mise à jour . Il n'est pas entièrement implémenté dans les liaisons natives, mais fonctionne dans la version javascript pure. Je vais travailler sur cela dans le la semaine prochaine ou deux. Dans le même temps utiliser la version javascript pur et un coup d'oeil ici:
https://github.com/brianc/node-postgres/blob/master/test/integration/client/result-metadata-tests.js
** FIN EDIT **
Quelqu'un peut-il aider?
Salut Marco !! Merci d'avoir répondu! Je suis entré en contact avec le développeur de pg module pour node.js et j'ai édité la question pour mettre en vedette sa réponse! En ce qui concerne votre réponse, c'était mon intention initiale, mais comme je développe en utilisant heroku et que j'ai besoin de taps pour migrer la base de données, j'ai un problème car je pense que les taps ne peuvent pas exporter les procédures stockées. (Je peux me tromper cependant) de toute façon pouvez-vous m'éclairer sur les problèmes de performance sur les procédures stockées? A propos des problèmes de concurrence, je ne pense pas qu'ils s'appliquent, mais si vous pouviez poster un lien vers ilustrate Transictions, ce serait parfait ...;) Merci encore une fois !! – jribeiro