BUG #15587: Partitions with ALTER TABLE ADD CONSTRAINT

The Post Office <noreply@postgresql.org>

From: PG Bug reporting form <noreply@postgresql.org>
To: pgsql-bugs@lists.postgresql.org
Cc: jesper.pedersen@redhat.com
Date: 2019-01-10T13:55:24Z
Lists: pgsql-bugs
The following bug has been logged on the website:

Bug reference:      15587
Logged by:          Jesper Pedersen
Email address:      jesper.pedersen@redhat.com
PostgreSQL version: 11.1
Operating system:   Fedora 28
Description:        

Hi,

The following works

CREATE TABLE t1 (i1 INT NOT NULL, i2 INT NOT NULL) PARTITION BY HASH (i1);

\o /dev/null
SELECT 'CREATE TABLE t1_p' || x::text || ' PARTITION OF t1
FOR VALUES WITH (MODULUS 64, REMAINDER ' || x::text || ');'
from generate_series(0,63) x;
\gexec
\o

ALTER TABLE ONLY t1 ADD CONSTRAINT uniq_t1_i1_i2 UNIQUE (i1, i2);

which gives

test=# \d+ t1
                              Partitioned table "public.t1"
 Column |  Type   | Collation | Nullable | Default | Storage | Stats target
| Description 
--------+---------+-----------+----------+---------+---------+--------------+-------------
 i1     | integer |           | not null |         | plain   |             
| 
 i2     | integer |           | not null |         | plain   |             
| 
Partition key: HASH (i1)
Indexes:
    "uniq_t1_i1_i2" UNIQUE CONSTRAINT, btree (i1, i2) INVALID


Removing ONLY from the ALTER command makes the index correct.

All branches.

Best regards,
 Jesper

Commits

  1. Fix creation of duplicate foreign keys on partitions