【发布时间】:2019-01-17 11:13:19
【问题描述】:
我正在关注this 进行批量 INSERT
有两个查询。第一个查询插入到<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"
上面的查询不是按顺序执行的吗?先插入表一,再插入表二?
这是如何提交查询的问题吗?我也尝试过使用上面链接页面中示例所示的交易。
有什么想法吗?
【问题讨论】:
-
您应该首先记录所有正在执行的查询,这样您就可以看到确切的顺序。然后你可以在 pgAdmin 中重新运行它,看看你的问题出在哪里。然后就有可能弄清楚如何解决它。使用pg-monitor 获取所有查询,或至少获取事件query。
-
查询事件帮助我识别导致此问题的 SQL 错误。刚刚安装了 pg-monitor。惊人的!谢谢。
标签: postgresql pg-promise