【发布时间】:2020-04-19 05:44:59
【问题描述】:
在这部分代码中,我在表格中插入数据。
//some code...
const classIdArr = request.body.classIdArr;
await dbPool.query('BEGIN');
const result = await dbPool.query('Insert Into T_SUBJECT (NAME, NAME_ENG) Values ($1, $2) Returning ID', [subject.name, subject.name_eng]);
const subjectId = result.rows[0].id;
await Promise.all(classIdArr.map(async (classId) => {
await dbPool.query('Insert Into T_BIND_SUBJECT_CLASS (CLASS_ID, SUBJECT_ID) Values ($1, $2)', [classId, subjectId]);
}));
await dbPool.query('COMMIT');
//some code...
T_BIND_SUBJECT_CLASS 有约束。有一个
...
CONSTRAINT t_bind_subject_class_fk_subject FOREIGN KEY (subject_id)
REFERENCES public.t_subject (id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE
DEFERRABLE INITIALLY DEFERRED
NOT VALID
...
如果 classIdArr 的长度 === 1 没有问题,但如果 > 1 - postgreSQL 抛出错误:
在表上插入或更新 “t_bind_subject_class”违反外键约束 "t_bind_subject_class_fk_subject"
为什么?此约束为 DEFERRABLE INITIALLY DEFERRED。据我了解,这意味着所有检查都发生在事务结束时,但在这种情况下,它们是在第一次插入后检查的
请帮忙。谢谢!
【问题讨论】:
标签: node.js postgresql pg