Re: Foreign key validation failure in 18beta1
От | jian he |
---|---|
Тема | Re: Foreign key validation failure in 18beta1 |
Дата | |
Msg-id | CACJufxF1e_gPOLtsDoaE4VCgQPC8KZW_kPAjPR5Rvv4Ew=fb2A@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Foreign key validation failure in 18beta1 (Tender Wang <tndrwang@gmail.com>) |
Ответы |
Re: Foreign key validation failure in 18beta1
|
Список | pgsql-hackers |
On Thu, May 29, 2025 at 8:12 PM Amul Sul <sulamul@gmail.com> wrote: > > > >> > [...] > > The attached *draft* patch is based on your idea. > > > > The idea is that we only need to conditionally do > > ``tab->constraints = lappend(tab->constraints, newcon);`` within > > QueueFKConstraintValidation. > > but the catalog update needs to be done recursively. > > I like this approach, but I don’t think the flag name "recursing" is > appropriate, as the flag is meant to indicate whether we want to > enqueue constraints for validation or not. > Later, I came up with "need_validate", but it seems "queueValidation" is better. I just realized we have the same problem with ALTER FOREIGN KEY ENFORCED. for example: begin; drop table if exists fk; drop table if exists pk; create table pk(i int, b int, primary key(i ,b)) partition by range (i); create table pk_1 partition of pk for values from (0) to (10) partition by list(b); CREATE TABLE pk_1_p1 PARTITION OF pk_1 FOR VALUES IN (0, 1, 2); create table pk_2 partition of pk for values from (10) to (12); insert into pk values (0, 1), (1,2); create table fk(i int, b int); insert into fk values (0, 1), (1,3); -- alter table fk add foreign key(i) references pk; alter table fk add constraint fk_i_fkey foreign key(i, b) references pk not enforced; commit; alter table fk alter constraint fk_i_fkey enforced; --error delete from fk where i = 1 and b = 3; alter table fk alter constraint fk_i_fkey enforced; --ok
В списке pgsql-hackers по дате отправления: