POSTGRESQL:设置约束全部延迟;不适用于 FK 约束

问题描述 投票:0回答:0

我有一个 INSERT 过程的问题,我得到错误:“表“lab”违反了外键约束“fk_lab_act”。

"SET CONSTRAINTS all DEFERRED" 

没有效果,如果我尝试 SET CONSTRAINTS "fk_lab_act" DEFERRED - 我收到一条消息说没有这样的约束。

我的代码:

 create or replace procedure "DB_ESG".insert_lab()
    language plpgsql
    as $$
    begin
    SET CONSTRAINTS all DEFERRED;
    insert into "DB_ESG".lab select * from public.data_lab on conflict do nothing;
    commit;end;$$;

错误:

SQL 错误 [23503]:错误:在表“lab”上插入或更新违反外键约束“fk_lab_act” 键 (Act_number)=(00001-ТР-230822-В-1) 不存在于表“acts”中。 PL/pgSQL 函数“DB_ESG”.insert_lab() 第 5 行在 COMMIT

当我创建表时,我将 FK 创建为命名约束,但无论如何 Postgres 告诉我没有这样的约束。

喜欢:

 CREATE TABLE lab(
   ID int not null,
    Act_number text,
    constraint "fk_lab_act"
    foreign key("Act_number") references "DB_ESG".ACTS("ACT_NUM") ON DELETE cascade deferrable        initially deferred);

试过“SET session_replication_role = replica;”但我没有权限。

当我尝试禁用所有触发器时,我也有错误: SQL 错误 [42501]:错误:权限被拒绝:“RI_ConstraintTrigger_c_18672”是系统触发器

PostgreSQL v15.2

postgresql insert foreign-keys constraints
© www.soinside.com 2019 - 2024. All rights reserved.