Remove undocumented restriction against duplicate partition key columns.
authorTom Lane
Thu, 19 Jul 2018 19:41:46 +0000 (15:41 -0400)
committerTom Lane
Thu, 19 Jul 2018 19:41:46 +0000 (15:41 -0400)
transformPartitionSpec rejected duplicate simple partition columns
(e.g., "PARTITION BY RANGE (x,x)") but paid no attention to expression
columns, resulting in inconsistent behavior.  Worse, cases like
"PARTITION BY RANGE (x,(x))") were accepted but would then result in
dump/reload failures, since the expression (x) would get simplified
to a plain column later.

There seems no better reason for this restriction than there was for
the one against duplicate included index columns (cf commit 701fd0bbc),
so let's just remove it.

Back-patch to v10 where this code was added.

Report and patch by Yugo Nagata.

Discussion: https://postgr.es/m/20180712165939.36b12aff[email protected]

src/backend/commands/tablecmds.c
src/test/regress/expected/create_table.out
src/test/regress/sql/create_table.sql

index 81c384509549d7761f3efacf13ffd901fe337a45..f4745f3a9a43cb5ebe664d27ea5d583755dc9dd9 100644 (file)
@@ -13223,21 +13223,6 @@ transformPartitionSpec(Relation rel, PartitionSpec *partspec, char *strategy)
    foreach(l, partspec->partParams)
    {
        PartitionElem *pelem = castNode(PartitionElem, lfirst(l));
-       ListCell   *lc;
-
-       /* Check for PARTITION BY ... (foo, foo) */
-       foreach(lc, newspec->partParams)
-       {
-           PartitionElem *pparam = castNode(PartitionElem, lfirst(lc));
-
-           if (pelem->name && pparam->name &&
-               strcmp(pelem->name, pparam->name) == 0)
-               ereport(ERROR,
-                       (errcode(ERRCODE_DUPLICATE_COLUMN),
-                        errmsg("column \"%s\" appears more than once in partition key",
-                               pelem->name),
-                        parser_errposition(pstate, pelem->location)));
-       }
 
        if (pelem->expr)
        {
index 0026aa11dd46ff499f22c30a64146b9f91a7216a..660398bdbe09742e8fb87c61c9e640087c6596b0 100644 (file)
@@ -305,11 +305,6 @@ CREATE TABLE partitioned (
 ERROR:  exclusion constraints are not supported on partitioned tables
 LINE 3:  EXCLUDE USING gist (a WITH &&)
          ^
--- prevent column from being used twice in the partition key
-CREATE TABLE partitioned (
-   a int
-) PARTITION BY RANGE (a, a);
-ERROR:  column "a" appears more than once in partition key
 -- prevent using prohibited expressions in the key
 CREATE FUNCTION retset (a int) RETURNS SETOF int AS $$ SELECT 1; $$ LANGUAGE SQL IMMUTABLE;
 CREATE TABLE partitioned (
index ad836141379eb76bb20dc517144decc3359325e6..16f2edb897b6a677fbe82080189fdbe8c7c4c161 100644 (file)
@@ -315,11 +315,6 @@ CREATE TABLE partitioned (
    EXCLUDE USING gist (a WITH &&)
 ) PARTITION BY RANGE (a);
 
--- prevent column from being used twice in the partition key
-CREATE TABLE partitioned (
-   a int
-) PARTITION BY RANGE (a, a);
-
 -- prevent using prohibited expressions in the key
 CREATE FUNCTION retset (a int) RETURNS SETOF int AS $$ SELECT 1; $$ LANGUAGE SQL IMMUTABLE;
 CREATE TABLE partitioned (