From cb3b76ed24b21471cc870e91d55cf595e2a2d908 Mon Sep 17 00:00:00 2001 From: Halil Ozan Akgul Date: Tue, 17 Aug 2021 15:15:27 +0300 Subject: [PATCH] Introduces get_partition_parent_compat and RelationGetPartitionDesc_compat macros get_partition_parent and RelationGetPartitionDesc functions now have new parameters to also include detached partitions Thess new macros give us the ability to use these new parameter for PG14 and they don't give the parameters for previous versions Existing parameters are set to not accept detached partitions Relevant PG commit: 71f4c8c6f74ba021e55d35b1128d22fb8c6e1629 --- src/backend/distributed/utils/multi_partitioning_utils.c | 8 ++++---- src/include/distributed/version_compat.h | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/backend/distributed/utils/multi_partitioning_utils.c b/src/backend/distributed/utils/multi_partitioning_utils.c index fbe21e68c..50d77a84a 100644 --- a/src/backend/distributed/utils/multi_partitioning_utils.c +++ b/src/backend/distributed/utils/multi_partitioning_utils.c @@ -539,7 +539,7 @@ IsParentTable(Oid relationId) Oid PartitionParentOid(Oid partitionOid) { - Oid partitionParentOid = get_partition_parent(partitionOid); + Oid partitionParentOid = get_partition_parent_compat(partitionOid, false); return partitionParentOid; } @@ -590,7 +590,7 @@ PartitionList(Oid parentRelationId) ereport(ERROR, (errmsg("\"%s\" is not a parent table", relationName))); } - PartitionDesc partDesc = RelationGetPartitionDesc(rel); + PartitionDesc partDesc = RelationGetPartitionDesc_compat(rel, true); Assert(partDesc != NULL); int partitionCount = partDesc->nparts; @@ -623,7 +623,7 @@ GenerateDetachPartitionCommand(Oid partitionTableId) ereport(ERROR, (errmsg("\"%s\" is not a partition", relationName))); } - Oid parentId = get_partition_parent(partitionTableId); + Oid parentId = get_partition_parent_compat(partitionTableId, false); char *tableQualifiedName = generate_qualified_relation_name(partitionTableId); char *parentTableQualifiedName = generate_qualified_relation_name(parentId); @@ -717,7 +717,7 @@ GenerateAlterTableAttachPartitionCommand(Oid partitionTableId) ereport(ERROR, (errmsg("\"%s\" is not a partition", relationName))); } - Oid parentId = get_partition_parent(partitionTableId); + Oid parentId = get_partition_parent_compat(partitionTableId, false); char *tableQualifiedName = generate_qualified_relation_name(partitionTableId); char *parentTableQualifiedName = generate_qualified_relation_name(parentId); diff --git a/src/include/distributed/version_compat.h b/src/include/distributed/version_compat.h index 1155488c4..960ef8eef 100644 --- a/src/include/distributed/version_compat.h +++ b/src/include/distributed/version_compat.h @@ -58,6 +58,8 @@ #define SetTuplestoreDestReceiverParams_compat(a, b, c, d, e, f) \ SetTuplestoreDestReceiverParams(a, b, c, d, e, f) #define pgproc_statusflags_compat(pgproc) ((pgproc)->statusFlags) +#define get_partition_parent_compat(a, b) get_partition_parent(a, b) +#define RelationGetPartitionDesc_compat(a, b) RelationGetPartitionDesc(a, b) #else #define AlterTableStmtObjType(a) ((a)->relkind) #define F_NEXTVAL_COMPAT F_NEXTVAL_OID @@ -89,6 +91,8 @@ SetTuplestoreDestReceiverParams(a, b, c, d) #define pgproc_statusflags_compat(pgproc) \ ((&ProcGlobal->allPgXact[(pgproc)->pgprocno])->vacuumFlags) +#define get_partition_parent_compat(a, b) get_partition_parent(a) +#define RelationGetPartitionDesc_compat(a, b) RelationGetPartitionDesc(a) #endif #if PG_VERSION_NUM >= PG_VERSION_13