我有一个 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