如何将loggingdynamic插入nodejs中相互连接的两个表中

这可能是一个非常简单的问题,虽然花了很长时间,仍然没有弄明白。 我需要postgresql中的两个表,并在我的nodejs应用程序中dynamic更新。 table1有两列(obj_id,obj_name),table2有更多的列,同时包含一列作为“obj_id”作为“fk”引用table1的“obj_id”; 我试图在table1中插入一条logging,然后做一些处理,并将相应的logging插入到table2中。 我需要从第一个插入返回的“obj_id”值,并与其他值一起使用做第二次插入。 我试图用下面的代码来做到这一点,而它总是抛出错误说( 插入或更新表“table2”违反外键约束“rel_table2_table1” )。

function uploadTable1(name,callback){ const client = new pg.Client(conString); client.connect(); client.on("drain", function () { client.end(); }); let insertTable1 = client.query(`INSERT INTO table1 (obj_name) VALUES ($1) RETURNING obj_id`, [name]); insertTable1.on("row", function (row,result) { callback(row.obj_id); }); 

}

 function uploadTable2(kk,ff) { return function (obj_id) { const client = new pg.Client(conString); client.connect(); client.on("drain", function () { client.end(); }); let uploadQuery = client.query("INSERT INTO table2 (kk,ff,obj_id) VALUES ($1,$2, $3)",[kk,ff, obj_id]); } } 

我可以一个一个地手动运行这两个函数插入logging没有问题,而当它们在主程序中一起运行,如下面的代码所示,我得到了上面提到的错误。

 uploadTable1("obj_name1",uploadTable2("kk1","ff1")); 

我检查了table1已经插入成功,新的logging“obj_id”值已经传递给正在做插入table2的callback函数。 虽然奇怪的是他们抛出错误,似乎在插入table2的logging时至less在运行callback函数时抱怨说“fk”还不存在。

你有什么build议来解决这个冲突?

我假设你在两个函数中做了两个独立的连接。 也许uploadTable1事务尚未提交,当您尝试uploadTable2("kk1","ff1") ?..

有了这个假设,请尝试将uploadTable1更改为:

 function uploadTable1(name,callback){ const client = new pg.Client(conString); client.connect(); client.on("drain", function () { client.end(); let insertTable1 = client.query(`INSERT INTO table1 (obj_name) VALUES ($1) RETURNING obj_id`, [name]); insertTable1.on("row", function (row,result) { callback(row.obj_id); }); }); 

有想法,那client.end(); 将终止连接“强制”提交…

或者,考虑重写代码在一个会话中运行两个语句,而不是一个事务…