我有两个表,每个表都引用另一个外键:
coordinates[0]->x = coordinate.x;
coordinates[0]->y = coordinate.y;
users
favorite_post_id int NOT NULL
考虑一个用户可以有很多帖子,但是只有一个喜欢的帖子。
我想使用posts
user_id int NOT NULL
命令用两个CSV文件为数据库播种。数据包含相互引用的行(即,带有COPY
的帖子,以及带有(id: 2, user_id: 1)
的用户)
但是我无法使插入操作同时发生,导致在插入一个表时出现错误,这违反了对另一个表的外部约束。
(id: 1, favorite_post_id: 2)
有没有一种方法可以一次提交插入,使其同时发生?
答案 0 :(得分:1)
如果您确定导入不会引起不一致,则可以
BEGIN;
SET LOCAL session_replication_role = replica;
COPY users FROM ...;
COPY posts FROM ...;
COMMIT;
此设置将禁用触发器,从而禁用外键约束。
如果不确定100%的数据,更好的方法是删除外键约束之一,加载表并再次创建约束。
如果您需要防止并发活动造成不一致,也可以在事务中执行此操作。