Thread

Commits

  1. Restructure foreign key handling code for ATTACH/DETACH

  2. Refuse ATTACH of a table referenced by a foreign key

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

    The Post Office <noreply@postgresql.org> — 2024-07-15T10:00:01Z

    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.
    
    
  2. Re: BUG #18541: Reattaching a partition referenced by a foreign key fails with an error

    Tender Wang <tndrwang@gmail.com> — 2024-07-15T13:18:34Z

    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]. I guess it is same issue.
    I send a patch in [1], but it may need a more work.
    
    
    [1] https://www.postgresql.org/message-id/20230705233028.2f554f73%40karst
    
    -- 
    Tender Wang
    
  3. Re: BUG #18541: Reattaching a partition referenced by a foreign key fails with an error

    Alvaro Herrera <alvherre@alvh.no-ip.org> — 2024-08-07T18:44:55Z

    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/
    
    
    
    
  4. Re: BUG #18541: Reattaching a partition referenced by a foreign key fails with an error

    Alvaro Herrera <alvherre@alvh.no-ip.org> — 2024-08-07T18:50:50Z

    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/
    
    
    
    
  5. Re: BUG #18541: Reattaching a partition referenced by a foreign key fails with an error

    Alvaro Herrera <alvherre@alvh.no-ip.org> — 2024-08-07T22:22:39Z

    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.
    
    [1] https://postgr.es/m/20230705233028.2f554f73@karst
    
    -- 
    Álvaro Herrera               48°01'N 7°57'E  —  https://www.EnterpriseDB.com/
    
  6. Re: BUG #18541: Reattaching a partition referenced by a foreign key fails with an error

    Tender Wang <tndrwang@gmail.com> — 2024-08-08T14:27:49Z

    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] https://postgr.es/m/20230705233028.2f554f73@karst
    >
    >
    
    -- 
    Tender Wang
    
  7. Re: BUG #18541: Reattaching a partition referenced by a foreign key fails with an error

    Alvaro Herrera <alvherre@alvh.no-ip.org> — 2024-08-08T23:37:10Z

    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/