gpt4 book ai didi

node.js - 如何动态地将记录插入到nodejs中相互连接的两个表中

转载 作者:行者123 更新时间:2023-11-29 13:20:03 25 4
gpt4 key购买 nike

这可能是一个很简单的问题,虽然我花了很长时间仍然没有弄明白。我需要 postgresql 中的两个表并在我的 nodejs 应用程序中动态更新。 table1 有两列(obj_id,obj_name),table2 有更多列,其中包括一列作为“obj_id”,因为“fk”指的是 table1 的“obj_id”;我尝试在table1中插入一条记录,然后做一些处理,将相应的记录插入到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]);
}
}

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

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

我检查过 table1 已成功插入,新记录“obj_id”值已传递给执行插入 table2 的回调函数。虽然奇怪的是他们抛出错误,但似乎在为 table2 插入记录时提示“fk”尚不存在,至少在运行回调函数时是这样。

您对解决这些冲突有何建议?

最佳答案

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

根据这个假设,尝试将 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(); 将终止连接“强制”提交...

或者,考虑重写代码以在一个 session 中运行两个语句,而不是一个事务...

关于node.js - 如何动态地将记录插入到nodejs中相互连接的两个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43580423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com