繁体   English   中英

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

[英]Postgres: Insert values in two tables simultaneously from 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% 确定数据,更好的方法是删除外键约束之一,加载表并再次创建约束。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM