mirror of https://github.com/citusdata/citus.git
EnsureRelationCanBeDistributed
parent
5abead7f2c
commit
361acde19d
|
@ -99,7 +99,7 @@ static uint32 ColocationIdForNewTable(Oid relationId, Var *distributionColumn,
|
|||
int shardCount, bool shardCountIsStrict,
|
||||
char *colocateWithTableName,
|
||||
bool viaDeprecatedAPI);
|
||||
static void EnsureRelationCanBeDistributed(Oid relationId, Var *distributionColumn,
|
||||
static void EnsureRelationCanBeDistributed(Oid relationId, List *distributionColumnList,
|
||||
char distributionMethod, uint32 colocationId,
|
||||
char replicationModel, bool viaDeprecatedAPI);
|
||||
static void EnsureTableCanBeColocatedWith(Oid relationId, char replicationModel,
|
||||
|
@ -525,7 +525,7 @@ CreateDistributedTable(Oid relationId, List *distributionColumnList,
|
|||
colocateWithTableName,
|
||||
viaDeprecatedAPI);
|
||||
|
||||
EnsureRelationCanBeDistributed(relationId, linitial(distributionColumnList),
|
||||
EnsureRelationCanBeDistributed(relationId, distributionColumnList,
|
||||
distributionMethod,
|
||||
colocationId, replicationModel, viaDeprecatedAPI);
|
||||
|
||||
|
@ -1083,7 +1083,7 @@ ColocationIdForNewTable(Oid relationId, Var *distributionColumn,
|
|||
* there will not be any change in the given relation.
|
||||
*/
|
||||
static void
|
||||
EnsureRelationCanBeDistributed(Oid relationId, Var *distributionColumn,
|
||||
EnsureRelationCanBeDistributed(Oid relationId, List *distributionColumnList,
|
||||
char distributionMethod, uint32 colocationId,
|
||||
char replicationModel, bool viaDeprecatedAPI)
|
||||
{
|
||||
|
@ -1109,6 +1109,9 @@ EnsureRelationCanBeDistributed(Oid relationId, Var *distributionColumn,
|
|||
"... AS IDENTITY.")));
|
||||
}
|
||||
|
||||
Var *distributionColumn = NULL;
|
||||
foreach_ptr(distributionColumn, distributionColumnList)
|
||||
{
|
||||
/* verify target relation is not distributed by a generated columns */
|
||||
if (distributionMethod != DISTRIBUTE_BY_NONE &&
|
||||
DistributionColumnUsesGeneratedStoredColumn(relationDesc, distributionColumn))
|
||||
|
@ -1131,7 +1134,8 @@ EnsureRelationCanBeDistributed(Oid relationId, Var *distributionColumn,
|
|||
errmsg("could not identify a hash function for type %s",
|
||||
format_type_be(distributionColumn->vartype)),
|
||||
errdatatype(distributionColumn->vartype),
|
||||
errdetail("Partition column types must have a hash function "
|
||||
errdetail(
|
||||
"Partition column types must have a hash function "
|
||||
"defined to use hash partitioning.")));
|
||||
}
|
||||
|
||||
|
@ -1146,7 +1150,8 @@ EnsureRelationCanBeDistributed(Oid relationId, Var *distributionColumn,
|
|||
else if (distributionMethod == DISTRIBUTE_BY_RANGE)
|
||||
{
|
||||
Oid btreeSupportFunction = SupportFunctionForColumn(distributionColumn,
|
||||
BTREE_AM_OID, BTORDER_PROC);
|
||||
BTREE_AM_OID,
|
||||
BTORDER_PROC);
|
||||
if (btreeSupportFunction == InvalidOid)
|
||||
{
|
||||
ereport(ERROR,
|
||||
|
@ -1154,10 +1159,12 @@ EnsureRelationCanBeDistributed(Oid relationId, Var *distributionColumn,
|
|||
errmsg("could not identify a comparison function for type %s",
|
||||
format_type_be(distributionColumn->vartype)),
|
||||
errdatatype(distributionColumn->vartype),
|
||||
errdetail("Partition column types must have a comparison function "
|
||||
errdetail(
|
||||
"Partition column types must have a comparison function "
|
||||
"defined to use range partitioning.")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (PartitionTable(relationId))
|
||||
{
|
||||
|
@ -1216,7 +1223,7 @@ EnsureRelationCanBeDistributed(Oid relationId, Var *distributionColumn,
|
|||
}
|
||||
|
||||
ErrorIfUnsupportedConstraint(relation, distributionMethod, replicationModel,
|
||||
distributionColumn, colocationId);
|
||||
linitial(distributionColumnList), colocationId);
|
||||
|
||||
|
||||
ErrorIfUnsupportedPolicy(relation);
|
||||
|
|
Loading…
Reference in New Issue