在PostgreSQL中启用、禁用和验证外键约束
近期在做数据迁移的过程中,遇到有外键约束的表由于表之间数据的依赖关系和数据的导入顺序导致数据加载失败,因此记录了一下关于这类问题的解决思路。
-- 建表
create table t1 ( a serial primary key, b text,c date);
create table t2 ( a serial primary key,b int references t1(a),c text);
-- 违反外键约束的插入,测试数据
COPY public.t2 (a, b, c) FROM stdin;
1 1 aa
2 2 aa
\.
COPY public.t1 (a, b, c) FROM stdin;
1 aa 2020-06-24
2 bb 2020-06-24
\.
psql:b.sql:26: ERROR: insert or update on table "t2" violates foreign key constraint "t2_b_fkey"
DETAIL: Key (b)=(1) is not present in table "t1".
因为此时数据本身并没有问题,只是当前恢复表数据时候顺序导致的报错,所以此时我们可以首先禁用t2表上的外键约束并在加载对其进行验证。
test=# alter t

在数据迁移过程中,为了解决因表间数据依赖导致的数据加载失败,本文介绍了如何在PostgreSQL中禁用、启用外键约束及验证约束。禁用约束需要超级用户权限,可以通过删除并重新创建外键、更新系统表或使用约束延迟生效的方法来处理外键约束问题。
3485

被折叠的 条评论
为什么被折叠?



