Add suppressNoticeMessages to TableConversionState

pull/4567/head
Onur Tirtir 2021-01-25 13:05:08 +03:00
parent cacb76d2c6
commit 458a81f93d
2 changed files with 77 additions and 38 deletions

View File

@ -162,6 +162,12 @@ typedef struct TableConversionState
* ALTER_TABLE_SET_ACCESS_METHOD -> AlterTableSetAccessMethod * ALTER_TABLE_SET_ACCESS_METHOD -> AlterTableSetAccessMethod
*/ */
TableConversionFunction function; TableConversionFunction function;
/*
* suppressNoticeMessages determines if we want to suppress NOTICE
* messages that we explicitly issue
*/
bool suppressNoticeMessages;
} TableConversionState; } TableConversionState;
@ -177,7 +183,8 @@ static TableConversionState * CreateTableConversion(TableConversionParameters *p
static void CreateDistributedTableLike(TableConversionState *con); static void CreateDistributedTableLike(TableConversionState *con);
static void CreateCitusTableLike(TableConversionState *con); static void CreateCitusTableLike(TableConversionState *con);
static List * GetViewCreationCommandsOfTable(Oid relationId); static List * GetViewCreationCommandsOfTable(Oid relationId);
static void ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands); static void ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands,
bool suppressNoticeMessages);
static void CheckAlterDistributedTableConversionParameters(TableConversionState *con); static void CheckAlterDistributedTableConversionParameters(TableConversionState *con);
static char * CreateWorkerChangeSequenceDependencyCommand(char *sequenceSchemaName, static char * CreateWorkerChangeSequenceDependencyCommand(char *sequenceSchemaName,
char *sequenceName, char *sequenceName,
@ -522,15 +529,18 @@ ConvertTable(TableConversionState *con)
bool includeIndexes = true; bool includeIndexes = true;
if (con->accessMethod && strcmp(con->accessMethod, "columnar") == 0) if (con->accessMethod && strcmp(con->accessMethod, "columnar") == 0)
{ {
List *explicitIndexesOnTable = GetExplicitIndexOidList(con->relationId); if (!con->suppressNoticeMessages)
Oid indexOid = InvalidOid;
foreach_oid(indexOid, explicitIndexesOnTable)
{ {
ereport(NOTICE, (errmsg("the index %s on table %s will be dropped, " List *explicitIndexesOnTable = GetExplicitIndexOidList(con->relationId);
"because columnar tables cannot have indexes", Oid indexOid = InvalidOid;
get_rel_name(indexOid), foreach_oid(indexOid, explicitIndexesOnTable)
quote_qualified_identifier(con->schemaName, {
con->relationName)))); ereport(NOTICE, (errmsg("the index %s on table %s will be dropped, "
"because columnar tables cannot have indexes",
get_rel_name(indexOid),
quote_qualified_identifier(con->schemaName,
con->relationName))));
}
} }
includeIndexes = false; includeIndexes = false;
@ -580,9 +590,12 @@ ConvertTable(TableConversionState *con)
if (PartitionedTable(con->relationId)) if (PartitionedTable(con->relationId))
{ {
ereport(NOTICE, (errmsg("converting the partitions of %s", if (!con->suppressNoticeMessages)
quote_qualified_identifier(con->schemaName, {
con->relationName)))); ereport(NOTICE, (errmsg("converting the partitions of %s",
quote_qualified_identifier(con->schemaName,
con->relationName))));
}
List *partitionList = PartitionList(con->relationId); List *partitionList = PartitionList(con->relationId);
@ -617,6 +630,7 @@ ConvertTable(TableConversionState *con)
.shardCount = con->shardCount, .shardCount = con->shardCount,
.cascadeToColocated = cascadeOption, .cascadeToColocated = cascadeOption,
.colocateWith = con->colocateWith, .colocateWith = con->colocateWith,
.suppressNoticeMessages = con->suppressNoticeMessages,
/* /*
* Even if we called UndistributeTable with cascade option, we * Even if we called UndistributeTable with cascade option, we
@ -636,9 +650,12 @@ ConvertTable(TableConversionState *con)
} }
} }
ereport(NOTICE, (errmsg("creating a new table for %s", if (!con->suppressNoticeMessages)
quote_qualified_identifier(con->schemaName, {
con->relationName)))); ereport(NOTICE, (errmsg("creating a new table for %s",
quote_qualified_identifier(con->schemaName,
con->relationName))));
}
TableDDLCommand *tableCreationCommand = NULL; TableDDLCommand *tableCreationCommand = NULL;
foreach_ptr(tableCreationCommand, preLoadCommands) foreach_ptr(tableCreationCommand, preLoadCommands)
@ -687,7 +704,8 @@ ConvertTable(TableConversionState *con)
CreateCitusTableLike(con); CreateCitusTableLike(con);
} }
ReplaceTable(con->relationId, con->newRelationId, justBeforeDropCommands); ReplaceTable(con->relationId, con->newRelationId, justBeforeDropCommands,
con->suppressNoticeMessages);
TableDDLCommand *tableConstructionCommand = NULL; TableDDLCommand *tableConstructionCommand = NULL;
foreach_ptr(tableConstructionCommand, postLoadCommands) foreach_ptr(tableConstructionCommand, postLoadCommands)
@ -732,7 +750,8 @@ ConvertTable(TableConversionState *con)
.shardCountIsNull = con->shardCountIsNull, .shardCountIsNull = con->shardCountIsNull,
.shardCount = con->shardCount, .shardCount = con->shardCount,
.colocateWith = qualifiedRelationName, .colocateWith = qualifiedRelationName,
.cascadeToColocated = CASCADE_TO_COLOCATED_NO_ALREADY_CASCADED .cascadeToColocated = CASCADE_TO_COLOCATED_NO_ALREADY_CASCADED,
.suppressNoticeMessages = con->suppressNoticeMessages
}; };
TableConversionReturn *colocatedReturn = con->function(&cascadeParam); TableConversionReturn *colocatedReturn = con->function(&cascadeParam);
foreignKeyCommands = list_concat(foreignKeyCommands, foreignKeyCommands = list_concat(foreignKeyCommands,
@ -875,6 +894,7 @@ CreateTableConversion(TableConversionParameters *params)
con->accessMethod = params->accessMethod; con->accessMethod = params->accessMethod;
con->cascadeToColocated = params->cascadeToColocated; con->cascadeToColocated = params->cascadeToColocated;
con->cascadeViaForeignKeys = params->cascadeViaForeignKeys; con->cascadeViaForeignKeys = params->cascadeViaForeignKeys;
con->suppressNoticeMessages = params->suppressNoticeMessages;
Relation relation = try_relation_open(con->relationId, ExclusiveLock); Relation relation = try_relation_open(con->relationId, ExclusiveLock);
if (relation == NULL) if (relation == NULL)
@ -1076,7 +1096,8 @@ GetViewCreationCommandsOfTable(Oid relationId)
* Source and target tables need to be in the same schema and have the same columns. * Source and target tables need to be in the same schema and have the same columns.
*/ */
void void
ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands) ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands,
bool suppressNoticeMessages)
{ {
char *sourceName = get_rel_name(sourceId); char *sourceName = get_rel_name(sourceId);
char *targetName = get_rel_name(targetId); char *targetName = get_rel_name(targetId);
@ -1087,8 +1108,11 @@ ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands)
if (!PartitionedTable(sourceId)) if (!PartitionedTable(sourceId))
{ {
ereport(NOTICE, (errmsg("Moving the data of %s", if (!suppressNoticeMessages)
quote_qualified_identifier(schemaName, sourceName)))); {
ereport(NOTICE, (errmsg("Moving the data of %s",
quote_qualified_identifier(schemaName, sourceName))));
}
appendStringInfo(query, "INSERT INTO %s SELECT * FROM %s", appendStringInfo(query, "INSERT INTO %s SELECT * FROM %s",
quote_qualified_identifier(schemaName, targetName), quote_qualified_identifier(schemaName, targetName),
@ -1126,16 +1150,22 @@ ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands)
ExecuteQueryViaSPI(justBeforeDropCommand, SPI_OK_UTILITY); ExecuteQueryViaSPI(justBeforeDropCommand, SPI_OK_UTILITY);
} }
ereport(NOTICE, (errmsg("Dropping the old %s", if (!suppressNoticeMessages)
quote_qualified_identifier(schemaName, sourceName)))); {
ereport(NOTICE, (errmsg("Dropping the old %s",
quote_qualified_identifier(schemaName, sourceName))));
}
resetStringInfo(query); resetStringInfo(query);
appendStringInfo(query, "DROP TABLE %s CASCADE", appendStringInfo(query, "DROP TABLE %s CASCADE",
quote_qualified_identifier(schemaName, sourceName)); quote_qualified_identifier(schemaName, sourceName));
ExecuteQueryViaSPI(query->data, SPI_OK_UTILITY); ExecuteQueryViaSPI(query->data, SPI_OK_UTILITY);
ereport(NOTICE, (errmsg("Renaming the new table to %s", if (!suppressNoticeMessages)
quote_qualified_identifier(schemaName, sourceName)))); {
ereport(NOTICE, (errmsg("Renaming the new table to %s",
quote_qualified_identifier(schemaName, sourceName))));
}
resetStringInfo(query); resetStringInfo(query);
appendStringInfo(query, "ALTER TABLE %s RENAME TO %s", appendStringInfo(query, "ALTER TABLE %s RENAME TO %s",
@ -1309,23 +1339,26 @@ CheckAlterDistributedTableConversionParameters(TableConversionState *con)
} }
} }
/* Notices for no operation UDF calls */ if (!con->suppressNoticeMessages)
if (sameDistColumn)
{ {
ereport(NOTICE, (errmsg("table is already distributed by %s", /* Notices for no operation UDF calls */
con->distributionColumn))); if (sameDistColumn)
} {
ereport(NOTICE, (errmsg("table is already distributed by %s",
con->distributionColumn)));
}
if (sameShardCount) if (sameShardCount)
{ {
ereport(NOTICE, (errmsg("shard count of the table is already %d", ereport(NOTICE, (errmsg("shard count of the table is already %d",
con->shardCount))); con->shardCount)));
} }
if (sameColocateWith) if (sameColocateWith)
{ {
ereport(NOTICE, (errmsg("table is already colocated with %s", ereport(NOTICE, (errmsg("table is already colocated with %s",
con->colocateWith))); con->colocateWith)));
}
} }
} }

View File

@ -153,6 +153,12 @@ typedef struct TableConversionParameters
* to the table * to the table
*/ */
bool cascadeViaForeignKeys; bool cascadeViaForeignKeys;
/*
* suppressNoticeMessages determines if we want to suppress NOTICE
* messages that we explicitly issue
*/
bool suppressNoticeMessages;
} TableConversionParameters; } TableConversionParameters;
typedef struct TableConversionReturn typedef struct TableConversionReturn