gpt4 book ai didi

postgresql - 多个查询的批处理 INSERT 引发外键冲突

转载 作者:行者123 更新时间:2023-11-29 12:40:42 25 4
gpt4 key购买 nike

我正在关注 this做批量插入有两个查询。第一个查询插入 <tableone>第二个查询插入 <tabletwo> .

第二个表有一个引用 <tableone> 的外键约束.

下面的代码是我处理批量插入的方式

batchQuery.push(
insertTableOne,
insertTableTwo
);

const query = pgp.helpers.concat(batchQuery);
db.none(query)

insertTableOne看起来像

INSERT INTO tableone (id, att2, att3) VALUES 
(1, 'a', 'b'), (2, 'c', 'd'), (3, 'e', 'f'), ...

insertTableTwo看起来像

INSERT INTO tabletwo (id, tableone_id) VALUES 
(10, 1), (20, 2), (30, 3), ...

<tabletwo> 有约束

CONSTRAINT fk_tabletwo_tableone_id
FOREIGN KEY (tableone_id)
REFERENCES Tableone (id)

根据db.none(query)我得到一个 violates foreign key constraint "fk_tabletwo_tableone_id"

上面的查询不是按顺序执行的吗?先插入表一,再插入表二?

这是查询提交方式的问题吗?我还尝试使用上面链接页面中示例所示的交易。

有什么想法吗?

最佳答案

如果您通读了 spex.batch() 方法的文档(链接示例中的 pgp.helpers.concat() 方法使用了该方法) 说到 values 参数:

Array of mixed values (it can be empty), to be resolved asynchronously, in no particular order.

参见 http://vitaly-t.github.io/spex/global.html#batch

您可能需要查看另一种方法而不是使用 batch()

我建议在第一次插入完成后使用 .then() 链接依赖查询,即。类似于 db.none(insertTableOne).then(() => db.none(insertTableTwo))

关于postgresql - 多个查询的批处理 INSERT 引发外键冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51776312/

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