我正在跟踪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"
以上查询是否没有按顺序执行?首先插入表一,然后插入表二?
这与提交查询的方式有关吗?我还尝试使用上面链接页面中的示例所示的交易。
有什么想法吗?
答案 0 :(得分:3)
如果您通读了spex.batch()
方法(链接示例中的pgp.helpers.concat()
方法使用的文档)中的values
参数:
要解析的混合值数组(可以为空) 异步,没有特定顺序。
请参见http://vitaly-t.github.io/spex/global.html#batch
您可能需要查看另一种方法,而不是使用batch()
。
我建议在第一次插入完成后使用.then()
链接从属查询,即。像db.none(insertTableOne).then(() => db.none(insertTableTwo))