On Fri, May 17, 2019 at 10:30 AM Amit Langote <langote_amit...@lab.ntt.co.jp>
wrote:

> Agree that this behavior change seems unintentional.
>
> On 2019/05/17 12:40, Rushabh Lathia wrote:
> > Looking at the commit changes, it seems like at condition when no other
> > tablespace is specified, we default the tablespace to the parent
> partitioned
> > table's.
> >
> >     else if (stmt->partbound)
> >     {
> >         /*
> >          * For partitions, when no other tablespace is specified, we
> default
> >          * the tablespace to the parent partitioned table's.
> >          */
> >         Assert(list_length(inheritOids) == 1);
> >         tablespaceId = get_rel_tablespace(linitial_oid(inheritOids));
> >     }
> >
> > But here it doesn't consider the default_tablespace if the parent
> > partitioned
> > tablespace is an InvalidOid (which was the care before this commit).
> >
> > PFA patch to fix the same.
>
> +
> +               if (!OidIsValid(tablespaceId))
> +                       tablespaceId =
> GetDefaultTablespace(stmt->relation->relpersistence,
> partitioned);
>         }
>         else
>                 tablespaceId =
> GetDefaultTablespace(stmt->relation->relpersistence,
>
> Why not change it like this instead:
>
> @@ -681,7 +681,8 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid
> ownerId,
>          Assert(list_length(inheritOids) == 1);
>          tablespaceId = get_rel_tablespace(linitial_oid(inheritOids));
>      }
> -    else
> +
> +    if (!OidIsValid(tablespaceId))
>          tablespaceId =
> GetDefaultTablespace(stmt->relation->relpersistence,
>                                              partitioned);
>


Yes, sure we can do that. Here is the patch for the same.


-- 
Rushabh Lathia
www.EnterpriseDB.com
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index bfcf947..30a8c84 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -555,7 +555,7 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId,
 	char		relname[NAMEDATALEN];
 	Oid			namespaceId;
 	Oid			relationId;
-	Oid			tablespaceId;
+	Oid			tablespaceId = InvalidOid;
 	Relation	rel;
 	TupleDesc	descriptor;
 	List	   *inheritOids;
@@ -681,7 +681,8 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId,
 		Assert(list_length(inheritOids) == 1);
 		tablespaceId = get_rel_tablespace(linitial_oid(inheritOids));
 	}
-	else
+
+	if (!OidIsValid(tablespaceId))
 		tablespaceId = GetDefaultTablespace(stmt->relation->relpersistence,
 											partitioned);
 

Reply via email to