On Mon, Dec 7, 2020 at 11:01 PM Amit Langote <amitlangot...@gmail.com> wrote: > On Fri, Dec 4, 2020 at 12:05 PM Kyotaro Horiguchi > <horikyota....@gmail.com> wrote: > > > Also, the comment that was in RI_ConstraintInfo now appears in > > > RI_ConstraintParam, and the new struct (RI_ConstraintInfo) is now > > > undocumented. What is the relationship between those two structs? I > > > see that they have pointers to each other, but I think the relationship > > > should be documented more clearly. > > > > I'm not sure the footprint of this patch worth doing but here is a bit > > more polished version. > > I noticed that the foreign_key test fails and it may have to do with > the fact that a partition's param info remains attached to the > parent's RI_ConstraintInfo even after it's detached from the parent > table using DETACH PARTITION.
Just for (maybe not so distant) future reference, I managed to fix the failure with this: diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index 187884f..c67f2a6 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -1932,7 +1932,7 @@ ri_BuildQueryKey(RI_QueryKey *key, const RI_ConstraintInfo *riinfo, * We assume struct RI_QueryKey contains no padding bytes, else we'd need * to use memset to clear them. */ - key->constr_id = riinfo->param->query_key; + key->constr_id = riinfo->constraint_id; key->constr_queryno = constr_queryno; } It seems the shareable part (param) is not properly invalidated after a partition's constraint is detached, apparently leaving query_key in it set to the parent's constraint id. -- Amit Langote EDB: http://www.enterprisedb.com