Tender Wang <tndrw...@gmail.com> 于2024年8月22日周四 11:19写道:

>
>
> Alvaro Herrera <alvhe...@alvh.no-ip.org> 于2024年8月22日周四 06:00写道:
>
>> On 2024-Aug-19, Alvaro Herrera wrote:
>>
>> > I haven't pushed it yet, mostly because of being unsure about not doing
>> > anything for the oldest branches (14 and back).
>>
>> Last night, after much mulling on this, it occurred to me that one easy
>> way out of this problem for the old branches, without having to write
>> more code, is to simply remove the constraint from the partition when
>> it's detached (but only if they reference a partitioned relation).  It's
>> not a great solution, but at least we're no longer leaving bogus catalog
>> entries around.  That would be like the attached patch, which was cut
>> from 14 and applies cleanly to 12 and 13.  I'd throw in a couple of
>> tests and call it a day.
>>
>
> I apply the v14 patch on branch REL_14_STABLE. I run this thread issue and
> I
> find below error.
> postgres=# CREATE TABLE p ( id bigint PRIMARY KEY ) PARTITION BY list (id);
> CREATE TABLE p_1 PARTITION OF p FOR VALUES IN (1);
> CREATE TABLE r_1 (
>     id   bigint PRIMARY KEY,
>     p_id bigint NOT NULL,
>     FOREIGN KEY (p_id) REFERENCES p (id)
> );
> CREATE TABLE r (
>     id   bigint PRIMARY KEY,
>     p_id bigint NOT NULL,
>     FOREIGN KEY (p_id) REFERENCES p (id)
> ) PARTITION BY list (id);
> ALTER TABLE r ATTACH PARTITION r_1 FOR VALUES IN (1);
> ALTER TABLE r DETACH PARTITION r_1;
> CREATE TABLE
> CREATE TABLE
> CREATE TABLE
> CREATE TABLE
> ALTER TABLE
> ERROR:  cache lookup failed for constraint 16400
>

I guess it is because cascade dropping, the oid=16400 has been deleted.
Adding a list that remember dropped constraint, if we find the parent of
constraint
is in the list, we skip.

By the way, I run above SQL sequences on REL_14_STABLE without your partch.
I didn't find reporting error, and running oidjoins.sql  didn't report
warnings.
Do I miss something?


-- 
Tender Wang

Reply via email to