From c4e2fe3500898b51996bc313da63956ac0504235 Mon Sep 17 00:00:00 2001 From: Ahmet Gedemenli Date: Mon, 16 Aug 2021 15:55:48 +0300 Subject: [PATCH] Enable partitioned citus local tables --- .../citus_add_local_table_to_metadata.c | 23 +++++++++++-------- .../transaction/relation_access_tracking.c | 6 ----- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/backend/distributed/commands/citus_add_local_table_to_metadata.c b/src/backend/distributed/commands/citus_add_local_table_to_metadata.c index 303f2ea3a..b2e102769 100644 --- a/src/backend/distributed/commands/citus_add_local_table_to_metadata.c +++ b/src/backend/distributed/commands/citus_add_local_table_to_metadata.c @@ -330,6 +330,17 @@ CreateCitusLocalTable(Oid relationId, bool cascadeViaForeignKeys) attnumList); FinalizeCitusLocalTableCreation(shellRelationId, dependentSequenceList); + + /* if this table is partitioned table, add its partitions to metadata too */ + if (PartitionedTable(relationId)) + { + List *partitionList = PartitionList(relationId); + Oid partitionRelationId = InvalidOid; + foreach_oid(partitionRelationId, partitionList) + { + CreateCitusLocalTable(partitionRelationId, false); + } + } } @@ -387,20 +398,14 @@ ErrorIfUnsupportedCitusLocalTableKind(Oid relationId) "relationships", relationName))); } - if (PartitionTable(relationId)) - { - ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot add local table \"%s\" to metadata, local tables " - "added to metadata cannot be partition of other tables ", - relationName))); - } char relationKind = get_rel_relkind(relationId); - if (!(relationKind == RELKIND_RELATION || relationKind == RELKIND_FOREIGN_TABLE)) + if (!(relationKind == RELKIND_RELATION || relationKind == RELKIND_FOREIGN_TABLE || relationKind == RELKIND_PARTITIONED_TABLE)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot add local table \"%s\" to metadata, only regular " - "tables and foreign tables can be added to citus metadata ", + "tables, foreign tables and partitioned tables can be " + "added to citus metadata ", relationName))); } diff --git a/src/backend/distributed/transaction/relation_access_tracking.c b/src/backend/distributed/transaction/relation_access_tracking.c index e534cb1af..06241ee85 100644 --- a/src/backend/distributed/transaction/relation_access_tracking.c +++ b/src/backend/distributed/transaction/relation_access_tracking.c @@ -227,12 +227,6 @@ PlacementAccessTypeToText(ShardPlacementAccessType accessType) static void RecordRelationAccessBase(Oid relationId, ShardPlacementAccessType accessType) { - /* - * We call this only for reference tables, and we don't support partitioned - * reference tables. - */ - Assert(!PartitionedTable(relationId) && !PartitionTable(relationId)); - /* make sure that this is not a conflicting access */ CheckConflictingRelationAccesses(relationId, accessType);