Postgres:从csv同时在两个表中插入值

游牧田

我有两个表,每个表都引用另一个外键:

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%确定数据,更好的方法是删除外键约束之一,加载表并再次创建约束。

如果需要防止并发活动引起不一致,那么也可以在事务中执行此操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章