sql - Postgres : Insert values in two tables simultaneously from csv

标签 sql postgresql

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

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/

相关文章:

ruby - 缓存获取的网页有哪些选项?

php - 从查询中存储值 PHP MYSQL

javascript倒计时器与数据库中的sql时间?

php - php函数也会影响子目录吗?

c# - 在 Dapper 中使用 Protocol Buffer 模型时如何将 C# ticks 映射到 PostgreSQL 时间戳?

sql - IS NULL 和 IS NOT DISTINCT FROM NULL 之间有区别吗?

sql - 将金钱转换为文本并保持格式

mysql - SQL语句随机选择具有特定条件的一行

postgresql - 如何将 PostGIS 添加到 PostgreSQL pgAdmin?

postgresql - 使用两列作为行数据来透视 PostgreSQL 中的数据