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

时间:2019-08-23 14:48:33

标签: sql postgresql

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

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)

有没有一种方法可以一次提交插入,使其同时发生?

1 个答案:

答案 0 :(得分:1)

如果您确定导入不会引起不一致,则可以

BEGIN;

SET LOCAL session_replication_role = replica;

COPY users FROM ...;
COPY posts FROM ...;

COMMIT;

此设置将禁用触发器,从而禁用外键约束。

如果不确定100%的数据,更好的方法是删除外键约束之一,加载表并再次创建约束。

如果您需要防止并发活动造成不一致,也可以在事务中执行此操作。