我正在尝试将数据播种到我的 Supabase 数据库中,但即使我的 Seed.sql(由 Supabase 生成)在顶部包含
SET session_replication_role = replica
,约束仍然被强制执行。我通过日志验证复制角色成功更改为“replica
”(SELECT current_setting('session_replication_role'
)显示“replica
”),但我的检查约束rounds_end_time_check
仍然阻止插入。
您需要放弃
NOT NULL
和 CHECK
约束才能解除它们,即使您的意思是暂时的。
它们不像
foreign key
、unique
和 exclude
(显然是 constraint triggers
)那样由触发器强制执行,因此它们不受 session_replication_role
或 alter table t1 disable trigger all;
的影响,并且不能被推迟set constraints
.
可以创建
check
约束 not valid
,但之后仍会检查所有传入行。create table test(id int not null);
alter table test disable trigger all;
insert into test values(null);
ERROR: null value in column "id" of relation "test" violates not-null constraint DETAIL: Failing row contains (null).
create table test(id int check (id>3));
alter table test disable trigger all;
insert into test values(2);
ERROR: new row for relation "test" violates check constraint "test_id_check" DETAIL: Failing row contains (2).
create table test(id int);--ok
insert into test values(1);--ok
alter table test add constraint id_gt_3 check (id>3) not valid;--ok
insert into test values(2);--error
ERROR: new row for relation "test" violates check constraint "id_gt_3" DETAIL: Failing row contains (2).