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);