diff options
| author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2018-10-04 11:37:20 -0300 |
|---|---|---|
| committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2018-10-04 11:40:36 -0300 |
| commit | fb9e93a2c5cf99e59a7e9362afd462f29e71bc1e (patch) | |
| tree | e7bb7e7911f122e49d5aabad1349499e635fa0e5 /src/backend | |
| parent | 09921f397b84bdae8406f3dc6f473ead730a6dd3 (diff) | |
| download | postgresql-fb9e93a2c5cf99e59a7e9362afd462f29e71bc1e.tar.gz | |
Fix duplicate primary keys in partitions
When using the CREATE TABLE .. PARTITION OF syntax, it's possible to
cause a partition to get two primary keys if the parent already has one.
Tighten the check to disallow that.
Reported-by: Rajkumar Raghuwanshi
Author: Amul Sul
Discussion: https://postgr.es/m/CAKcux6=OnSV3-qd8Gb6W=KPPwcCz6Fe_O_MQYjTa24__Xn8XxA@mail.gmail.com
Diffstat (limited to 'src/backend')
| -rw-r--r-- | src/backend/catalog/index.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 9229f619d2..39605732b1 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -218,12 +218,12 @@ index_check_primary_key(Relation heapRel, int i; /* - * If ALTER TABLE, check that there isn't already a PRIMARY KEY. In CREATE - * TABLE, we have faith that the parser rejected multiple pkey clauses; - * and CREATE INDEX doesn't have a way to say PRIMARY KEY, so it's no - * problem either. + * If ALTER TABLE and CREATE TABLE .. PARTITION OF, check that there isn't + * already a PRIMARY KEY. In CREATE TABLE for an ordinary relations, we + * have faith that the parser rejected multiple pkey clauses; and CREATE + * INDEX doesn't have a way to say PRIMARY KEY, so it's no problem either. */ - if (is_alter_table && + if ((is_alter_table || heapRel->rd_rel->relispartition) && relationHasPrimaryKey(heapRel)) { ereport(ERROR, |
