BUG #18541: Reattaching a partition referenced by a foreign key fails with an error

Started by PG Bug reporting formalmost 2 years ago7 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 18541
Logged by: Alexander Lakhin
Email address: exclusion@gmail.com
PostgreSQL version: 17beta2
Operating system: Ubuntu 22.04
Description:

The following script:
CREATE TABLE t1 (a int, PRIMARY KEY (a));
CREATE TABLE t (a int, PRIMARY KEY (a), FOREIGN KEY (a) REFERENCES t1)
PARTITION BY LIST (a);
ALTER TABLE t ATTACH PARTITION t1 FOR VALUES IN (1);
ALTER TABLE t DETACH PARTITION t1;
ALTER TABLE t ATTACH PARTITION t1 FOR VALUES IN (1);

ends up with the error complaining about check triggers:
ERROR: XX000: could not find ON INSERT check triggers of foreign key
constraint 16400
LOCATION: GetForeignKeyCheckTriggers, tablecmds.c:11260

Reproduced on REL_15_STABLE (starting from f4566345c) .. master.

#2Tender Wang
tndrwang@gmail.com
In reply to: PG Bug reporting form (#1)
Re: BUG #18541: Reattaching a partition referenced by a foreign key fails with an error

PG Bug reporting form <noreply@postgresql.org> 于2024年7月15日周一 21:02写道:

The following bug has been logged on the website:

Bug reference: 18541
Logged by: Alexander Lakhin
Email address: exclusion@gmail.com
PostgreSQL version: 17beta2
Operating system: Ubuntu 22.04
Description:

The following script:
CREATE TABLE t1 (a int, PRIMARY KEY (a));
CREATE TABLE t (a int, PRIMARY KEY (a), FOREIGN KEY (a) REFERENCES t1)
PARTITION BY LIST (a);
ALTER TABLE t ATTACH PARTITION t1 FOR VALUES IN (1);
ALTER TABLE t DETACH PARTITION t1;
ALTER TABLE t ATTACH PARTITION t1 FOR VALUES IN (1);

ends up with the error complaining about check triggers:
ERROR: XX000: could not find ON INSERT check triggers of foreign key
constraint 16400
LOCATION: GetForeignKeyCheckTriggers, tablecmds.c:11260

Reproduced on REL_15_STABLE (starting from f4566345c) .. master.

Hi Alexander,

I saw the same error in [1]/messages/by-id/20230705233028.2f554f73@karst. I guess it is same issue.
I send a patch in [1]/messages/by-id/20230705233028.2f554f73@karst, but it may need a more work.

[1]: /messages/by-id/20230705233028.2f554f73@karst

--
Tender Wang

#3Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Tender Wang (#2)
Re: BUG #18541: Reattaching a partition referenced by a foreign key fails with an error

On 2024-Jul-15, Tender Wang wrote:

PG Bug reporting form <noreply@postgresql.org> 于2024年7月15日周一 21:02写道:

The following script:
CREATE TABLE t1 (a int, PRIMARY KEY (a));
CREATE TABLE t (a int, PRIMARY KEY (a), FOREIGN KEY (a) REFERENCES t1)
PARTITION BY LIST (a);
ALTER TABLE t ATTACH PARTITION t1 FOR VALUES IN (1);
ALTER TABLE t DETACH PARTITION t1;
ALTER TABLE t ATTACH PARTITION t1 FOR VALUES IN (1);

ends up with the error complaining about check triggers:
ERROR: XX000: could not find ON INSERT check triggers of foreign key
constraint 16400
LOCATION: GetForeignKeyCheckTriggers, tablecmds.c:11260

I saw the same error in [1]. I guess it is same issue.
I send a patch in [1], but it may need a more work.

I think this schema is nuts. Do you have a practical use for something
like this?

I am tempted to fix this by dictating that you can't join a table as a
partition if the partitioned table contains an FK that references that
table.

FWIW the patch I have fixes all the other reported problems with FKs and
partitioned tables, but not this one.

--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/

#4Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Alvaro Herrera (#3)
Re: BUG #18541: Reattaching a partition referenced by a foreign key fails with an error

On 2024-Aug-07, Alvaro Herrera wrote:

I think this schema is nuts. Do you have a practical use for something
like this?

FWIW if you try to set this up the other way around, you get a different
error:

create table t (a int primary key) partition by list (a);
create table t1 partition of t for values in (1);
alter table t add foreign key (a) references t1;
ERROR: cannot ALTER TABLE "t1" because it is being used by active queries in this session

so I'm not bothered by the restriction in functionality.

--
Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/

#5Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Tender Wang (#2)
Re: BUG #18541: Reattaching a partition referenced by a foreign key fails with an error

On 2024-Jul-15, Tender Wang wrote:

PG Bug reporting form <noreply@postgresql.org> 于2024年7月15日周一 21:02写道:

The following script:
CREATE TABLE t1 (a int, PRIMARY KEY (a));
CREATE TABLE t (a int, PRIMARY KEY (a), FOREIGN KEY (a) REFERENCES t1)
PARTITION BY LIST (a);
ALTER TABLE t ATTACH PARTITION t1 FOR VALUES IN (1);

I propose to reject this with the attached patch, which I intend to
backpatch all the way down to 12.

FWIW, it's not the same problem that Jehan-Guillaume described in [1]/messages/by-id/20230705233028.2f554f73@karst,
even though the error message being thrown is the same.

[1]: /messages/by-id/20230705233028.2f554f73@karst

--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/

Attachments:

0001-Refuse-ATTACH-of-a-table-referenced-by-a-foreign-key.patchtext/x-diff; charset=utf-8Download+41-1
#6Tender Wang
tndrwang@gmail.com
In reply to: Alvaro Herrera (#5)
Re: BUG #18541: Reattaching a partition referenced by a foreign key fails with an error

Alvaro Herrera <alvherre@alvh.no-ip.org> 于2024年8月8日周四 06:22写道:

On 2024-Jul-15, Tender Wang wrote:

PG Bug reporting form <noreply@postgresql.org> 于2024年7月15日周一 21:02写道:

The following script:
CREATE TABLE t1 (a int, PRIMARY KEY (a));
CREATE TABLE t (a int, PRIMARY KEY (a), FOREIGN KEY (a) REFERENCES t1)
PARTITION BY LIST (a);
ALTER TABLE t ATTACH PARTITION t1 FOR VALUES IN (1);

I propose to reject this with the attached patch, which I intend to
backpatch all the way down to 12.

FWIW, it's not the same problem that Jehan-Guillaume described in [1],
even though the error message being thrown is the same.

Thanks for explanation. The attached patch looks good to me.

[1] /messages/by-id/20230705233028.2f554f73@karst

--
Tender Wang

#7Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Tender Wang (#6)
Re: BUG #18541: Reattaching a partition referenced by a foreign key fails with an error

On 2024-Aug-08, Tender Wang wrote:

Thanks for explanation. The attached patch looks good to me.

Thanks for looking! I have pushed this now.

--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/