我有两个表,每个表都有一个外键引用另一个表:
users
favorite_post_id int NOT NULL
posts
user_id int NOT NULL
考虑一个用户可以有很多帖子,但只有一个最喜欢的帖子。
我想使用 COPY
命令为我的数据库添加两个 CSV 文件。数据包含相互引用的行(即具有 (id: 2, user_id: 1)
的帖子和具有 (id: 1, favorite_post_id: 2)
的用户)
但是,我无法同时进行插入,从而导致插入一个表时发生违反另一个表的外部约束的错误。
insert or update on table "posts" violates foreign key constraint "FK_d8feca7198a0931f8234dcc58d7"
Key (user_id)=(1) is not present in table "users".
有没有办法立即提交插入,以便它同时发生?
最佳答案
如果您确定导入不会导致不一致,您可以
BEGIN;
SET LOCAL session_replication_role = replica;
COPY users FROM ...;
COPY posts FROM ...;
COMMIT;
此设置将禁用触发器,从而禁用外键约束。
如果您不能 100% 确定数据,更好的方法是删除其中一个外键约束,加载表并再次创建约束。
如果您需要防止并发事件造成不一致,您也可以在事务中执行此操作。
关于sql - Postgres : Insert values in two tables simultaneously from csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57628589/