Give notice while converting table type

velioglu/view_propagation_sub
Burak Velioglu 2022-05-05 17:46:25 +03:00
parent ff003bccd8
commit 3b8fc62fc2
6 changed files with 33 additions and 5 deletions

View File

@ -216,6 +216,9 @@ PG_FUNCTION_INFO_V1(alter_distributed_table);
PG_FUNCTION_INFO_V1(alter_table_set_access_method);
PG_FUNCTION_INFO_V1(worker_change_sequence_dependency);
/* global variable keeping track of whether we are in a table type conversion function */
bool InTableTypeConversionFunctionCall = false;
/*
* undistribute_table gets a distributed table name and
@ -504,10 +507,16 @@ AlterTableSetAccessMethod(TableConversionParameters *params)
*
* The function returns a TableConversionReturn object that can stores variables that
* can be used at the caller operations.
*
* To be able to provide more meaningful messages while converting a table type,
* Citus keeps InTableTypeConversionFunctionCall flag. Don't forget to set it properly
* in case you add a new way to return from this function.
*/
TableConversionReturn *
ConvertTable(TableConversionState *con)
{
InTableTypeConversionFunctionCall = true;
/*
* We undistribute citus local tables that are not chained with any reference
* tables via foreign keys at the end of the utility hook.
@ -536,6 +545,7 @@ ConvertTable(TableConversionState *con)
* subgraph including itself, so return here.
*/
SetLocalEnableLocalReferenceForeignKeys(oldEnableLocalReferenceForeignKeys);
InTableTypeConversionFunctionCall = false;
return NULL;
}
char *newAccessMethod = con->accessMethod ? con->accessMethod :
@ -820,6 +830,7 @@ ConvertTable(TableConversionState *con)
SetLocalEnableLocalReferenceForeignKeys(oldEnableLocalReferenceForeignKeys);
InTableTypeConversionFunctionCall = false;
return ret;
}

View File

@ -116,6 +116,16 @@ PostprocessViewStmt(Node *node, const char *queryString)
return NIL;
}
/*
* Since Citus drops and recreates views while converting a table type, giving a
* NOTICE message is enough if the process in table type conversion function call
*/
if (InTableTypeConversionFunctionCall)
{
RaiseDeferredError(errMsg, NOTICE);
return NIL;
}
/*
* If the view is already distributed, we should provide an error to not have
* different definition of view on coordinator and worker nodes. If the view

View File

@ -556,6 +556,7 @@ ResetGlobalVariables()
TransactionModifiedNodeMetadata = false;
NodeMetadataSyncOnCommit = false;
InTopLevelDelegatedFunctionCall = false;
InTableTypeConversionFunctionCall = false;
ResetWorkerErrorIndication();
memset(&AllowedDistributionColumnValue, 0,
sizeof(AllowedDistributionColumn));

View File

@ -41,6 +41,12 @@
#define SHARD_SIZES_COLUMN_COUNT (3)
/*
* Flag to keep track of whether the process is currently in a function converting the
* type of the table.
*/
extern bool InTableTypeConversionFunctionCall;
/* In-memory representation of a typed tuple in pg_dist_shard. */
typedef struct ShardInterval
{

View File

@ -607,7 +607,7 @@ DETAIL: drop cascades to materialized view m_local
drop cascades to view v_local
CONTEXT: SQL statement "DROP TABLE alter_table_set_access_method.local CASCADE"
NOTICE: renaming the new table to alter_table_set_access_method.local
WARNING: "view v_local" has dependency to "table local" that is not in Citus' metadata
NOTICE: "view v_local" has dependency to "table local" that is not in Citus' metadata
DETAIL: "view v_local" will be created only locally
HINT: Distribute "table local" first to distribute "view v_local"
CONTEXT: SQL statement "CREATE VIEW alter_table_set_access_method.v_local AS SELECT local.a,
@ -670,7 +670,7 @@ DETAIL: drop cascades to materialized view m_local
drop cascades to view v_local
CONTEXT: SQL statement "DROP TABLE alter_table_set_access_method.local CASCADE"
NOTICE: renaming the new table to alter_table_set_access_method.local
WARNING: "view v_local" has dependency to "table local" that is not in Citus' metadata
NOTICE: "view v_local" has dependency to "table local" that is not in Citus' metadata
DETAIL: "view v_local" will be created only locally
HINT: Distribute "table local" first to distribute "view v_local"
CONTEXT: SQL statement "CREATE VIEW alter_table_set_access_method.v_local AS SELECT local.a,

View File

@ -340,19 +340,19 @@ drop cascades to view undis_view2
drop cascades to view another_schema.undis_view3
CONTEXT: SQL statement "DROP TABLE undistribute_table.view_table CASCADE"
NOTICE: renaming the new table to undistribute_table.view_table
WARNING: "view undis_view1" has dependency to "table view_table" that is not in Citus' metadata
NOTICE: "view undis_view1" has dependency to "table view_table" that is not in Citus' metadata
DETAIL: "view undis_view1" will be created only locally
HINT: Distribute "table view_table" first to distribute "view undis_view1"
CONTEXT: SQL statement "CREATE VIEW undistribute_table.undis_view1 AS SELECT view_table.a,
view_table.b
FROM view_table;"
WARNING: "view undis_view2" has dependency to "table view_table" that is not in Citus' metadata
NOTICE: "view undis_view2" has dependency to "table view_table" that is not in Citus' metadata
DETAIL: "view undis_view2" will be created only locally
HINT: Distribute "table view_table" first to distribute "view undis_view2"
CONTEXT: SQL statement "CREATE VIEW undistribute_table.undis_view2 AS SELECT view_table.a,
view_table.c
FROM view_table;"
WARNING: "view another_schema.undis_view3" has dependency to "table view_table" that is not in Citus' metadata
NOTICE: "view another_schema.undis_view3" has dependency to "table view_table" that is not in Citus' metadata
DETAIL: "view another_schema.undis_view3" will be created only locally
HINT: Distribute "table view_table" first to distribute "view another_schema.undis_view3"
CONTEXT: SQL statement "CREATE VIEW another_schema.undis_view3 AS SELECT undis_view1.b,