From 3b556cb5ed3bb663269474008499b6b59da3e40e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCrkan=20=C4=B0ndibay?= Date: Tue, 21 Nov 2023 16:43:51 +0300 Subject: [PATCH 1/5] Adds create / drop database propagation support (#7240) DESCRIPTION: Adds support for propagating `CREATE`/`DROP` database In this PR, create and drop database support is added. For CREATE DATABASE: * "oid" option is not supported * specifying "strategy" to be different than "wal_log" is not supported * specifying "template" to be different than "template1" is not supported The last two are because those are not saved in `pg_database` and when activating a node, we cannot assume what parameters were provided when creating the database. And "oid" is not supported because whether user specified an arbitrary oid when creating the database is not saved in pg_database and we want to avoid from oid collisions that might arise from attempting to use an auto-assigned oid on workers. Finally, in case of node activation, GRANTs for the database are also propagated. --------- Co-authored-by: Jelte Fennema-Nio Co-authored-by: Jelte Fennema-Nio Co-authored-by: Onur Tirtir --- src/backend/distributed/commands/database.c | 476 ++++++++- .../distributed/commands/dependencies.c | 35 +- .../commands/distribute_object_ops.c | 32 + .../distributed/commands/utility_hook.c | 55 +- .../distributed/deparser/citus_deparseutils.c | 89 ++ .../deparser/deparse_database_stmts.c | 113 +- src/backend/distributed/metadata/dependency.c | 1 - src/backend/distributed/metadata/distobject.c | 39 +- .../distributed/metadata/metadata_sync.c | 160 +++ src/backend/distributed/shared_library_init.c | 11 + .../distributed/sql/citus--12.1-1--12.2-1.sql | 2 +- .../sql/downgrades/citus--12.2-1--12.1-1.sql | 2 + .../12.2-1.sql | 10 + .../latest.sql | 10 + src/include/distributed/commands.h | 12 + .../distributed/commands/utility_hook.h | 2 + src/include/distributed/deparser.h | 24 + src/include/distributed/metadata/distobject.h | 1 + src/include/distributed/metadata_sync.h | 1 + .../create_drop_database_propagation.out | 962 ++++++++++++++++++ .../create_drop_database_propagation_pg15.out | 82 ++ ...reate_drop_database_propagation_pg15_0.out | 9 + .../create_drop_database_propagation_pg16.out | 23 + ...reate_drop_database_propagation_pg16_0.out | 9 + .../failure_create_index_concurrently.out | 30 +- src/test/regress/expected/multi_extension.out | 3 +- .../regress/expected/multi_test_helpers.out | 70 ++ src/test/regress/expected/single_node.out | 5 +- src/test/regress/expected/single_node_0.out | 5 +- .../expected/upgrade_list_citus_objects.out | 3 +- src/test/regress/multi_1_schedule | 3 + src/test/regress/pg_regress_multi.pl | 2 +- .../sql/create_drop_database_propagation.sql | 554 ++++++++++ .../create_drop_database_propagation_pg15.sql | 65 ++ .../create_drop_database_propagation_pg16.sql | 22 + src/test/regress/sql/multi_test_helpers.sql | 71 ++ 36 files changed, 2933 insertions(+), 60 deletions(-) create mode 100644 src/backend/distributed/deparser/citus_deparseutils.c create mode 100644 src/backend/distributed/sql/udfs/citus_internal_database_command/12.2-1.sql create mode 100644 src/backend/distributed/sql/udfs/citus_internal_database_command/latest.sql create mode 100644 src/test/regress/expected/create_drop_database_propagation.out create mode 100644 src/test/regress/expected/create_drop_database_propagation_pg15.out create mode 100644 src/test/regress/expected/create_drop_database_propagation_pg15_0.out create mode 100644 src/test/regress/expected/create_drop_database_propagation_pg16.out create mode 100644 src/test/regress/expected/create_drop_database_propagation_pg16_0.out create mode 100644 src/test/regress/sql/create_drop_database_propagation.sql create mode 100644 src/test/regress/sql/create_drop_database_propagation_pg15.sql create mode 100644 src/test/regress/sql/create_drop_database_propagation_pg16.sql diff --git a/src/backend/distributed/commands/database.c b/src/backend/distributed/commands/database.c index 944ff627d..ade604d17 100644 --- a/src/backend/distributed/commands/database.c +++ b/src/backend/distributed/commands/database.c @@ -10,34 +10,76 @@ */ #include "postgres.h" +#include "miscadmin.h" +#include "access/heapam.h" #include "access/htup_details.h" #include "access/xact.h" #include "catalog/objectaddress.h" +#include "catalog/pg_collation.h" #include "catalog/pg_database.h" +#include "catalog/pg_database_d.h" +#include "catalog/pg_tablespace.h" #include "commands/dbcommands.h" -#include "miscadmin.h" +#include "commands/defrem.h" #include "nodes/parsenodes.h" +#include "utils/builtins.h" +#include "utils/lsyscache.h" +#include "utils/rel.h" +#include "utils/relcache.h" #include "utils/syscache.h" +#include "distributed/adaptive_executor.h" #include "distributed/commands.h" #include "distributed/commands/utility_hook.h" +#include "distributed/deparse_shard_query.h" #include "distributed/deparser.h" +#include "distributed/listutils.h" +#include "distributed/metadata/distobject.h" #include "distributed/metadata_sync.h" #include "distributed/metadata_utility.h" #include "distributed/multi_executor.h" #include "distributed/relation_access_tracking.h" +#include "distributed/worker_protocol.h" #include "distributed/worker_transaction.h" + +/* + * DatabaseCollationInfo is used to store collation related information of a database. + */ +typedef struct DatabaseCollationInfo +{ + char *datcollate; + char *datctype; + +#if PG_VERSION_NUM >= PG_VERSION_15 + char *daticulocale; + char *datcollversion; +#endif + +#if PG_VERSION_NUM >= PG_VERSION_16 + char *daticurules; +#endif +} DatabaseCollationInfo; + +static char * GenerateCreateDatabaseStatementFromPgDatabase(Form_pg_database + databaseForm); +static DatabaseCollationInfo GetDatabaseCollation(Oid dbOid); static AlterOwnerStmt * RecreateAlterDatabaseOwnerStmt(Oid databaseOid); -static Oid get_database_owner(Oid db_oid); -List * PreprocessGrantOnDatabaseStmt(Node *node, const char *queryString, - ProcessUtilityContext processUtilityContext); +#if PG_VERSION_NUM >= PG_VERSION_15 +static char * GetLocaleProviderString(char datlocprovider); +#endif +static char * GetTablespaceName(Oid tablespaceOid); +static ObjectAddress * GetDatabaseAddressFromDatabaseName(char *databaseName, + bool missingOk); + +static Oid get_database_owner(Oid dbId); + /* controlled via GUC */ +bool EnableCreateDatabasePropagation = false; bool EnableAlterDatabaseOwner = true; - /* * AlterDatabaseOwnerObjectAddress returns the ObjectAddress of the database that is the * object of the AlterOwnerStmt. Errors if missing_ok is false. @@ -94,13 +136,13 @@ RecreateAlterDatabaseOwnerStmt(Oid databaseOid) * get_database_owner returns the Oid of the role owning the database */ static Oid -get_database_owner(Oid db_oid) +get_database_owner(Oid dbId) { - HeapTuple tuple = SearchSysCache1(DATABASEOID, ObjectIdGetDatum(db_oid)); + HeapTuple tuple = SearchSysCache1(DATABASEOID, ObjectIdGetDatum(dbId)); if (!HeapTupleIsValid(tuple)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_DATABASE), - errmsg("database with OID %u does not exist", db_oid))); + errmsg("database with OID %u does not exist", dbId))); } Oid dba = ((Form_pg_database) GETSTRUCT(tuple))->datdba; @@ -213,7 +255,6 @@ PreprocessAlterDatabaseRefreshCollStmt(Node *node, const char *queryString, #endif - /* * PreprocessAlterDatabaseSetStmt is executed before the statement is applied to the local * postgres instance. @@ -242,3 +283,420 @@ PreprocessAlterDatabaseSetStmt(Node *node, const char *queryString, return NodeDDLTaskList(NON_COORDINATOR_NODES, commands); } + + +/* + * PostprocessAlterDatabaseStmt is executed before the statement is applied to the local + * Postgres instance. + * + * In this stage, we perform validations that we want to ensure before delegating to + * previous utility hooks because it might not be convenient to throw an error in an + * implicit transaction that creates a database. + */ +List * +PreprocessCreateDatabaseStmt(Node *node, const char *queryString, + ProcessUtilityContext processUtilityContext) +{ + if (!EnableCreateDatabasePropagation || !ShouldPropagate()) + { + return NIL; + } + + EnsureCoordinator(); + + CreatedbStmt *stmt = castNode(CreatedbStmt, node); + EnsureSupportedCreateDatabaseCommand(stmt); + + return NIL; +} + + +/* + * PostprocessCreateDatabaseStmt is executed after the statement is applied to the local + * postgres instance. In this stage we prepare the commands that need to be run on + * all workers to create the database. Since the CREATE DATABASE statement gives error + * in a transaction block, we need to use NontransactionalNodeDDLTaskList to send the + * CREATE DATABASE statement to the workers. + * + */ +List * +PostprocessCreateDatabaseStmt(Node *node, const char *queryString) +{ + if (!EnableCreateDatabasePropagation || !ShouldPropagate()) + { + return NIL; + } + + EnsureCoordinator(); + + /* + * Given that CREATE DATABASE doesn't support "IF NOT EXISTS" and we're + * in the post-process, database must exist, hence missingOk = false. + */ + bool missingOk = false; + bool isPostProcess = true; + List *addresses = GetObjectAddressListFromParseTree(node, missingOk, + isPostProcess); + EnsureAllObjectDependenciesExistOnAllNodes(addresses); + + char *createDatabaseCommand = DeparseTreeNode(node); + + List *commands = list_make3(DISABLE_DDL_PROPAGATION, + (void *) createDatabaseCommand, + ENABLE_DDL_PROPAGATION); + + return NontransactionalNodeDDLTaskList(NON_COORDINATOR_NODES, commands); +} + + +/* + * PreprocessDropDatabaseStmt is executed after the statement is applied to the local + * postgres instance. In this stage we can prepare the commands that need to be run on + * all workers to drop the database. Since the DROP DATABASE statement gives error in + * transaction context, we need to use NontransactionalNodeDDLTaskList to send the + * DROP DATABASE statement to the workers. + */ +List * +PreprocessDropDatabaseStmt(Node *node, const char *queryString, + ProcessUtilityContext processUtilityContext) +{ + if (!EnableCreateDatabasePropagation || !ShouldPropagate()) + { + return NIL; + } + + EnsureCoordinator(); + + DropdbStmt *stmt = (DropdbStmt *) node; + + bool isPostProcess = false; + List *addresses = GetObjectAddressListFromParseTree(node, stmt->missing_ok, + isPostProcess); + + if (list_length(addresses) != 1) + { + ereport(ERROR, (errmsg("unexpected number of objects found when " + "executing DROP DATABASE command"))); + } + + ObjectAddress *address = (ObjectAddress *) linitial(addresses); + if (address->objectId == InvalidOid || !IsAnyObjectDistributed(list_make1(address))) + { + return NIL; + } + + char *dropDatabaseCommand = DeparseTreeNode(node); + + List *commands = list_make3(DISABLE_DDL_PROPAGATION, + (void *) dropDatabaseCommand, + ENABLE_DDL_PROPAGATION); + + return NontransactionalNodeDDLTaskList(NON_COORDINATOR_NODES, commands); +} + + +/* + * DropDatabaseStmtObjectAddress gets the ObjectAddress of the database that is the + * object of the DropdbStmt. + */ +List * +DropDatabaseStmtObjectAddress(Node *node, bool missingOk, bool isPostprocess) +{ + DropdbStmt *stmt = castNode(DropdbStmt, node); + ObjectAddress *dbAddress = GetDatabaseAddressFromDatabaseName(stmt->dbname, + missingOk); + return list_make1(dbAddress); +} + + +/* + * CreateDatabaseStmtObjectAddress gets the ObjectAddress of the database that is the + * object of the CreatedbStmt. + */ +List * +CreateDatabaseStmtObjectAddress(Node *node, bool missingOk, bool isPostprocess) +{ + CreatedbStmt *stmt = castNode(CreatedbStmt, node); + ObjectAddress *dbAddress = GetDatabaseAddressFromDatabaseName(stmt->dbname, + missingOk); + return list_make1(dbAddress); +} + + +/* + * EnsureSupportedCreateDatabaseCommand validates the options provided for the CREATE + * DATABASE command. + * + * Parameters: + * stmt: A CreatedbStmt struct representing a CREATE DATABASE command. + * The options field is a list of DefElem structs, each representing an option. + * + * Currently, this function checks for the following: + * - The "oid" option is not supported. + * - The "template" option is only supported with the value "template1". + * - The "strategy" option is only supported with the value "wal_log". + */ +void +EnsureSupportedCreateDatabaseCommand(CreatedbStmt *stmt) +{ + DefElem *option = NULL; + foreach_ptr(option, stmt->options) + { + if (strcmp(option->defname, "oid") == 0) + { + ereport(ERROR, + errmsg("CREATE DATABASE option \"%s\" is not supported", + option->defname)); + } + + char *optionValue = defGetString(option); + + if (strcmp(option->defname, "template") == 0 && + strcmp(optionValue, "template1") != 0) + { + ereport(ERROR, errmsg("Only template1 is supported as template " + "parameter for CREATE DATABASE")); + } + + if (strcmp(option->defname, "strategy") == 0 && + strcmp(optionValue, "wal_log") != 0) + { + ereport(ERROR, errmsg("Only wal_log is supported as strategy " + "parameter for CREATE DATABASE")); + } + } +} + + +/* + * GetDatabaseAddressFromDatabaseName gets the database name and returns the ObjectAddress + * of the database. + */ +static ObjectAddress * +GetDatabaseAddressFromDatabaseName(char *databaseName, bool missingOk) +{ + Oid databaseOid = get_database_oid(databaseName, missingOk); + ObjectAddress *dbObjectAddress = palloc0(sizeof(ObjectAddress)); + ObjectAddressSet(*dbObjectAddress, DatabaseRelationId, databaseOid); + return dbObjectAddress; +} + + +/* + * GetTablespaceName gets the tablespace oid and returns the tablespace name. + */ +static char * +GetTablespaceName(Oid tablespaceOid) +{ + HeapTuple tuple = SearchSysCache1(TABLESPACEOID, ObjectIdGetDatum(tablespaceOid)); + if (!HeapTupleIsValid(tuple)) + { + return NULL; + } + + Form_pg_tablespace tablespaceForm = (Form_pg_tablespace) GETSTRUCT(tuple); + char *tablespaceName = pstrdup(NameStr(tablespaceForm->spcname)); + + ReleaseSysCache(tuple); + + return tablespaceName; +} + + +/* + * GetDatabaseCollation gets oid of a database and returns all the collation related information + * We need this method since collation related info in Form_pg_database is not accessible. + */ +static DatabaseCollationInfo +GetDatabaseCollation(Oid dbOid) +{ + DatabaseCollationInfo info; + memset(&info, 0, sizeof(DatabaseCollationInfo)); + + Relation rel = table_open(DatabaseRelationId, AccessShareLock); + HeapTuple tup = get_catalog_object_by_oid(rel, Anum_pg_database_oid, dbOid); + if (!HeapTupleIsValid(tup)) + { + elog(ERROR, "cache lookup failed for database %u", dbOid); + } + + bool isNull = false; + + TupleDesc tupdesc = RelationGetDescr(rel); + + Datum collationDatum = heap_getattr(tup, Anum_pg_database_datcollate, tupdesc, + &isNull); + info.datcollate = TextDatumGetCString(collationDatum); + + Datum ctypeDatum = heap_getattr(tup, Anum_pg_database_datctype, tupdesc, &isNull); + info.datctype = TextDatumGetCString(ctypeDatum); + +#if PG_VERSION_NUM >= PG_VERSION_15 + + Datum icuLocaleDatum = heap_getattr(tup, Anum_pg_database_daticulocale, tupdesc, + &isNull); + if (!isNull) + { + info.daticulocale = TextDatumGetCString(icuLocaleDatum); + } + + Datum collverDatum = heap_getattr(tup, Anum_pg_database_datcollversion, tupdesc, + &isNull); + if (!isNull) + { + info.datcollversion = TextDatumGetCString(collverDatum); + } +#endif + +#if PG_VERSION_NUM >= PG_VERSION_16 + Datum icurulesDatum = heap_getattr(tup, Anum_pg_database_daticurules, tupdesc, + &isNull); + if (!isNull) + { + info.daticurules = TextDatumGetCString(icurulesDatum); + } +#endif + + table_close(rel, AccessShareLock); + heap_freetuple(tup); + + return info; +} + + +#if PG_VERSION_NUM >= PG_VERSION_15 + +/* + * GetLocaleProviderString gets the datlocprovider stored in pg_database + * and returns the string representation of the datlocprovider + */ +static char * +GetLocaleProviderString(char datlocprovider) +{ + switch (datlocprovider) + { + case 'c': + { + return "libc"; + } + + case 'i': + { + return "icu"; + } + + default: + { + ereport(ERROR, (errmsg("unexpected datlocprovider value: %c", + datlocprovider))); + } + } +} + + +#endif + + +/* + * GenerateCreateDatabaseStatementFromPgDatabase gets the pg_database tuple and returns the + * CREATE DATABASE statement that can be used to create given database. + * + * Note that this doesn't deparse OID of the database and this is not a + * problem as we anyway don't allow specifying custom OIDs for databases + * when creating them. + */ +static char * +GenerateCreateDatabaseStatementFromPgDatabase(Form_pg_database databaseForm) +{ + DatabaseCollationInfo collInfo = GetDatabaseCollation(databaseForm->oid); + + StringInfoData str; + initStringInfo(&str); + + appendStringInfo(&str, "CREATE DATABASE %s", + quote_identifier(NameStr(databaseForm->datname))); + + appendStringInfo(&str, " CONNECTION LIMIT %d", databaseForm->datconnlimit); + + appendStringInfo(&str, " ALLOW_CONNECTIONS = %s", + quote_literal_cstr(databaseForm->datallowconn ? "true" : "false")); + + appendStringInfo(&str, " IS_TEMPLATE = %s", + quote_literal_cstr(databaseForm->datistemplate ? "true" : "false")); + + appendStringInfo(&str, " LC_COLLATE = %s", + quote_literal_cstr(collInfo.datcollate)); + + appendStringInfo(&str, " LC_CTYPE = %s", quote_literal_cstr(collInfo.datctype)); + + appendStringInfo(&str, " OWNER = %s", + quote_identifier(GetUserNameFromId(databaseForm->datdba, false))); + + appendStringInfo(&str, " TABLESPACE = %s", + quote_identifier(GetTablespaceName(databaseForm->dattablespace))); + + appendStringInfo(&str, " ENCODING = %s", + quote_literal_cstr(pg_encoding_to_char(databaseForm->encoding))); + +#if PG_VERSION_NUM >= PG_VERSION_15 + if (collInfo.datcollversion != NULL) + { + appendStringInfo(&str, " COLLATION_VERSION = %s", + quote_identifier(collInfo.datcollversion)); + } + + if (collInfo.daticulocale != NULL) + { + appendStringInfo(&str, " ICU_LOCALE = %s", quote_identifier( + collInfo.daticulocale)); + } + + appendStringInfo(&str, " LOCALE_PROVIDER = %s", + quote_identifier(GetLocaleProviderString( + databaseForm->datlocprovider))); +#endif + +#if PG_VERSION_NUM >= PG_VERSION_16 + if (collInfo.daticurules != NULL) + { + appendStringInfo(&str, " ICU_RULES = %s", quote_identifier( + collInfo.daticurules)); + } +#endif + + return str.data; +} + + +/* + * CreateDatabaseDDLCommand returns a CREATE DATABASE command to create given + * database + * + * Command is wrapped by citus_internal_database_command() UDF + * to avoid from transaction block restrictions that apply to database commands. + */ +char * +CreateDatabaseDDLCommand(Oid dbId) +{ + HeapTuple tuple = SearchSysCache1(DATABASEOID, ObjectIdGetDatum(dbId)); + if (!HeapTupleIsValid(tuple)) + { + ereport(ERROR, (errcode(ERRCODE_UNDEFINED_DATABASE), + errmsg("database with OID %u does not exist", dbId))); + } + + Form_pg_database databaseForm = (Form_pg_database) GETSTRUCT(tuple); + + char *createStmt = GenerateCreateDatabaseStatementFromPgDatabase(databaseForm); + + StringInfo outerDbStmt = makeStringInfo(); + + /* Generate the CREATE DATABASE statement */ + appendStringInfo(outerDbStmt, + "SELECT pg_catalog.citus_internal_database_command(%s)", + quote_literal_cstr(createStmt)); + + ReleaseSysCache(tuple); + + return outerDbStmt->data; +} diff --git a/src/backend/distributed/commands/dependencies.c b/src/backend/distributed/commands/dependencies.c index e309ee86c..6ce699cf5 100644 --- a/src/backend/distributed/commands/dependencies.c +++ b/src/backend/distributed/commands/dependencies.c @@ -457,16 +457,37 @@ GetDependencyCreateDDLCommands(const ObjectAddress *dependency) case OCLASS_DATABASE: { - List *databaseDDLCommands = NIL; - - /* only propagate the ownership of the database when the feature is on */ - if (EnableAlterDatabaseOwner) + /* + * For the database where Citus is installed, only propagate the ownership of the + * database, only when the feature is on. + * + * This is because this database must exist on all nodes already so we shouldn't + * need to "CREATE" it on other nodes. However, we still need to correctly reflect + * its owner on other nodes too. + */ + if (dependency->objectId == MyDatabaseId && EnableAlterDatabaseOwner) { - List *ownerDDLCommands = DatabaseOwnerDDLCommands(dependency); - databaseDDLCommands = list_concat(databaseDDLCommands, ownerDDLCommands); + return DatabaseOwnerDDLCommands(dependency); } - return databaseDDLCommands; + /* + * For the other databases, create the database on all nodes, only when the feature + * is on. + */ + if (dependency->objectId != MyDatabaseId && EnableCreateDatabasePropagation) + { + char *databaseDDLCommand = CreateDatabaseDDLCommand(dependency->objectId); + + List *ddlCommands = list_make1(databaseDDLCommand); + + List *grantDDLCommands = GrantOnDatabaseDDLCommands(dependency->objectId); + + ddlCommands = list_concat(ddlCommands, grantDDLCommands); + + return ddlCommands; + } + + return NIL; } case OCLASS_PROC: diff --git a/src/backend/distributed/commands/distribute_object_ops.c b/src/backend/distributed/commands/distribute_object_ops.c index 72ea5beb4..06390f65d 100644 --- a/src/backend/distributed/commands/distribute_object_ops.c +++ b/src/backend/distributed/commands/distribute_object_ops.c @@ -475,6 +475,28 @@ static DistributeObjectOps Database_Alter = { .markDistributed = false, }; +static DistributeObjectOps Database_Create = { + .deparse = DeparseCreateDatabaseStmt, + .qualify = NULL, + .preprocess = PreprocessCreateDatabaseStmt, + .postprocess = PostprocessCreateDatabaseStmt, + .objectType = OBJECT_DATABASE, + .operationType = DIST_OPS_CREATE, + .address = CreateDatabaseStmtObjectAddress, + .markDistributed = true, +}; + +static DistributeObjectOps Database_Drop = { + .deparse = DeparseDropDatabaseStmt, + .qualify = NULL, + .preprocess = PreprocessDropDatabaseStmt, + .postprocess = NULL, + .objectType = OBJECT_DATABASE, + .operationType = DIST_OPS_DROP, + .address = DropDatabaseStmtObjectAddress, + .markDistributed = false, +}; + #if PG_VERSION_NUM >= PG_VERSION_15 static DistributeObjectOps Database_RefreshColl = { .deparse = DeparseAlterDatabaseRefreshCollStmt, @@ -1343,6 +1365,16 @@ GetDistributeObjectOps(Node *node) return &Database_Alter; } + case T_CreatedbStmt: + { + return &Database_Create; + } + + case T_DropdbStmt: + { + return &Database_Drop; + } + #if PG_VERSION_NUM >= PG_VERSION_15 case T_AlterDatabaseRefreshCollStmt: { diff --git a/src/backend/distributed/commands/utility_hook.c b/src/backend/distributed/commands/utility_hook.c index afc8fa9fd..29d7e08da 100644 --- a/src/backend/distributed/commands/utility_hook.c +++ b/src/backend/distributed/commands/utility_hook.c @@ -35,6 +35,7 @@ #include "access/htup_details.h" #include "catalog/catalog.h" #include "catalog/dependency.h" +#include "catalog/pg_database.h" #include "citus_version.h" #include "commands/dbcommands.h" #include "commands/defrem.h" @@ -694,7 +695,7 @@ citus_ProcessUtilityInternal(PlannedStmt *pstmt, } /* inform the user about potential caveats */ - if (IsA(parsetree, CreatedbStmt)) + if (IsA(parsetree, CreatedbStmt) && !EnableCreateDatabasePropagation) { if (EnableUnsupportedFeatureMessages) { @@ -724,22 +725,13 @@ citus_ProcessUtilityInternal(PlannedStmt *pstmt, } /* - * Make sure that dropping the role deletes the pg_dist_object entries. There is a - * separate logic for roles, since roles are not included as dropped objects in the - * drop event trigger. To handle it both on worker and coordinator nodes, it is not - * implemented as a part of process functions but here. + * Make sure that dropping node-wide objects deletes the pg_dist_object + * entries. There is a separate logic for node-wide objects (such as role + * and databases), since they are not included as dropped objects in the + * drop event trigger. To handle it both on worker and coordinator nodes, + * it is not implemented as a part of process functions but here. */ - if (IsA(parsetree, DropRoleStmt)) - { - DropRoleStmt *stmt = castNode(DropRoleStmt, parsetree); - List *allDropRoles = stmt->roles; - - List *distributedDropRoles = FilterDistributedRoles(allDropRoles); - if (list_length(distributedDropRoles) > 0) - { - UnmarkRolesDistributed(distributedDropRoles); - } - } + UnmarkNodeWideObjectsDistributed(parsetree); pstmt->utilityStmt = parsetree; @@ -1275,9 +1267,12 @@ ExecuteDistributedDDLJob(DDLJob *ddlJob) { ereport(WARNING, (errmsg( - "CONCURRENTLY-enabled index commands can fail partially, " - "leaving behind an INVALID index.\n Use DROP INDEX " - "CONCURRENTLY IF EXISTS to remove the invalid index."))); + "Commands that are not transaction-safe may result in " + "partial failure, potentially leading to an inconsistent " + "state.\nIf the problematic command is a CREATE operation, " + "consider using the 'IF EXISTS' syntax to drop the object," + "\nif applicable, and then re-attempt the original command."))); + PG_RE_THROW(); } } @@ -1491,6 +1486,28 @@ DDLTaskList(Oid relationId, const char *commandString) } +/* + * NontransactionalNodeDDLTaskList builds a list of tasks to execute a DDL command on a + * given target set of nodes with cannotBeExecutedInTransaction is set to make sure + * that task list is executed outside a transaction block. + */ +List * +NontransactionalNodeDDLTaskList(TargetWorkerSet targets, List *commands) +{ + List *ddlJobs = NodeDDLTaskList(targets, commands); + DDLJob *ddlJob = NULL; + foreach_ptr(ddlJob, ddlJobs) + { + Task *task = NULL; + foreach_ptr(task, ddlJob->taskList) + { + task->cannotBeExecutedInTransaction = true; + } + } + return ddlJobs; +} + + /* * NodeDDLTaskList builds a list of tasks to execute a DDL command on a * given target set of nodes. diff --git a/src/backend/distributed/deparser/citus_deparseutils.c b/src/backend/distributed/deparser/citus_deparseutils.c new file mode 100644 index 000000000..c0de4ae7c --- /dev/null +++ b/src/backend/distributed/deparser/citus_deparseutils.c @@ -0,0 +1,89 @@ +/*------------------------------------------------------------------------- + * + * citus_deparseutils.c + * + * This file contains common functions used for deparsing PostgreSQL + * statements to their equivalent SQL representation. + * + * Copyright (c) Citus Data, Inc. + * + *------------------------------------------------------------------------- + */ + +#include "pg_version_constants.h" + +#include "postgres.h" + +#include "commands/defrem.h" +#include "distributed/deparser.h" +#include "utils/builtins.h" +#include "utils/elog.h" +#include "utils/rel.h" +#include "utils/relcache.h" +#include "utils/syscache.h" +#include "utils/typcache.h" + + +/** + * DefElemOptionToStatement converts a DefElem option to a SQL statement and + * appends it to the given StringInfo buffer. + * + * @param buf The StringInfo buffer to append the SQL statement to. + * @param option The DefElem option to convert to a SQL statement. + * @param optionFormats The option format specification to use for the conversion. + * @param optionFormatsLen The number of option formats in the opt_formats array. + */ +void +DefElemOptionToStatement(StringInfo buf, DefElem *option, + const DefElemOptionFormat *optionFormats, + int optionFormatsLen) +{ + const char *name = option->defname; + int i; + + for (i = 0; i < optionFormatsLen; i++) + { + if (strcmp(name, optionFormats[i].name) == 0) + { + switch (optionFormats[i].type) + { + case OPTION_FORMAT_STRING: + { + char *value = defGetString(option); + appendStringInfo(buf, optionFormats[i].format, quote_identifier( + value)); + break; + } + + case OPTION_FORMAT_INTEGER: + { + int32 value = defGetInt32(option); + appendStringInfo(buf, optionFormats[i].format, value); + break; + } + + case OPTION_FORMAT_BOOLEAN: + { + bool value = defGetBoolean(option); + appendStringInfo(buf, optionFormats[i].format, value ? "true" : + "false"); + break; + } + + case OPTION_FORMAT_LITERAL_CSTR: + { + char *value = defGetString(option); + appendStringInfo(buf, optionFormats[i].format, quote_literal_cstr( + value)); + break; + } + + default: + { + elog(ERROR, "unrecognized option type: %d", optionFormats[i].type); + break; + } + } + } + } +} diff --git a/src/backend/distributed/deparser/deparse_database_stmts.c b/src/backend/distributed/deparser/deparse_database_stmts.c index d3d3ce633..1ae45f920 100644 --- a/src/backend/distributed/deparser/deparse_database_stmts.c +++ b/src/backend/distributed/deparser/deparse_database_stmts.c @@ -12,23 +12,46 @@ #include "postgres.h" #include "pg_version_compat.h" - #include "catalog/namespace.h" +#include "commands/defrem.h" #include "lib/stringinfo.h" #include "nodes/parsenodes.h" +#include "parser/parse_type.h" #include "utils/builtins.h" #include "distributed/deparser.h" +#include "distributed/commands.h" #include "distributed/citus_ruleutils.h" -#include "commands/defrem.h" #include "distributed/deparser.h" +#include "distributed/listutils.h" #include "distributed/log_utils.h" -#include "parser/parse_type.h" static void AppendAlterDatabaseOwnerStmt(StringInfo buf, AlterOwnerStmt *stmt); +static void AppendAlterDatabaseSetStmt(StringInfo buf, AlterDatabaseSetStmt *stmt); static void AppendAlterDatabaseStmt(StringInfo buf, AlterDatabaseStmt *stmt); static void AppendDefElemConnLimit(StringInfo buf, DefElem *def); +static void AppendCreateDatabaseStmt(StringInfo buf, CreatedbStmt *stmt); +static void AppendDropDatabaseStmt(StringInfo buf, DropdbStmt *stmt); +static void AppendGrantOnDatabaseStmt(StringInfo buf, GrantStmt *stmt); + +const DefElemOptionFormat create_database_option_formats[] = { + { "owner", " OWNER %s", OPTION_FORMAT_STRING }, + { "template", " TEMPLATE %s", OPTION_FORMAT_STRING }, + { "encoding", " ENCODING %s", OPTION_FORMAT_LITERAL_CSTR }, + { "strategy", " STRATEGY %s", OPTION_FORMAT_LITERAL_CSTR }, + { "locale", " LOCALE %s", OPTION_FORMAT_LITERAL_CSTR }, + { "lc_collate", " LC_COLLATE %s", OPTION_FORMAT_LITERAL_CSTR }, + { "lc_ctype", " LC_CTYPE %s", OPTION_FORMAT_LITERAL_CSTR }, + { "icu_locale", " ICU_LOCALE %s", OPTION_FORMAT_LITERAL_CSTR }, + { "icu_rules", " ICU_RULES %s", OPTION_FORMAT_LITERAL_CSTR }, + { "locale_provider", " LOCALE_PROVIDER %s", OPTION_FORMAT_LITERAL_CSTR }, + { "collation_version", " COLLATION_VERSION %s", OPTION_FORMAT_LITERAL_CSTR }, + { "tablespace", " TABLESPACE %s", OPTION_FORMAT_STRING }, + { "allow_connections", " ALLOW_CONNECTIONS %s", OPTION_FORMAT_BOOLEAN }, + { "connection_limit", " CONNECTION LIMIT %d", OPTION_FORMAT_INTEGER }, + { "is_template", " IS_TEMPLATE %s", OPTION_FORMAT_BOOLEAN } +}; char * DeparseAlterDatabaseOwnerStmt(Node *node) @@ -205,3 +228,87 @@ DeparseAlterDatabaseSetStmt(Node *node) return str.data; } + + +static void +AppendCreateDatabaseStmt(StringInfo buf, CreatedbStmt *stmt) +{ + /* + * Make sure that we don't try to deparse something that this + * function doesn't expect. + */ + EnsureSupportedCreateDatabaseCommand(stmt); + + appendStringInfo(buf, + "CREATE DATABASE %s", + quote_identifier(stmt->dbname)); + + DefElem *option = NULL; + foreach_ptr(option, stmt->options) + { + DefElemOptionToStatement(buf, option, create_database_option_formats, + lengthof(create_database_option_formats)); + } +} + + +char * +DeparseCreateDatabaseStmt(Node *node) +{ + CreatedbStmt *stmt = castNode(CreatedbStmt, node); + StringInfoData str = { 0 }; + initStringInfo(&str); + + AppendCreateDatabaseStmt(&str, stmt); + + return str.data; +} + + +static void +AppendDropDatabaseStmt(StringInfo buf, DropdbStmt *stmt) +{ + char *ifExistsStatement = stmt->missing_ok ? "IF EXISTS" : ""; + appendStringInfo(buf, + "DROP DATABASE %s %s", + ifExistsStatement, + quote_identifier(stmt->dbname)); + + if (list_length(stmt->options) > 1) + { + /* FORCE is the only option that can be provided for this command */ + elog(ERROR, "got unexpected number of options for DROP DATABASE"); + } + else if (list_length(stmt->options) == 1) + { + DefElem *option = linitial(stmt->options); + appendStringInfo(buf, " WITH ( "); + + if (strcmp(option->defname, "force") == 0) + { + appendStringInfo(buf, "FORCE"); + } + else + { + /* FORCE is the only option that can be provided for this command */ + ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("unrecognized DROP DATABASE option \"%s\"", + option->defname))); + } + + appendStringInfo(buf, " )"); + } +} + + +char * +DeparseDropDatabaseStmt(Node *node) +{ + DropdbStmt *stmt = castNode(DropdbStmt, node); + StringInfoData str = { 0 }; + initStringInfo(&str); + + AppendDropDatabaseStmt(&str, stmt); + + return str.data; +} diff --git a/src/backend/distributed/metadata/dependency.c b/src/backend/distributed/metadata/dependency.c index 989e957af..be2ceb3e3 100644 --- a/src/backend/distributed/metadata/dependency.c +++ b/src/backend/distributed/metadata/dependency.c @@ -698,7 +698,6 @@ SupportedDependencyByCitus(const ObjectAddress *address) case OCLASS_DATABASE: { - /* only to propagate its owner */ return true; } diff --git a/src/backend/distributed/metadata/distobject.c b/src/backend/distributed/metadata/distobject.c index fa9da8b75..9f31add60 100644 --- a/src/backend/distributed/metadata/distobject.c +++ b/src/backend/distributed/metadata/distobject.c @@ -22,11 +22,13 @@ #include "catalog/dependency.h" #include "catalog/namespace.h" #include "catalog/objectaddress.h" +#include "catalog/pg_database.h" #include "catalog/pg_extension_d.h" #include "catalog/pg_namespace.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" #include "citus_version.h" +#include "commands/dbcommands.h" #include "commands/extension.h" #include "distributed/listutils.h" #include "distributed/colocation_utils.h" @@ -49,7 +51,6 @@ #include "utils/regproc.h" #include "utils/rel.h" - static char * CreatePgDistObjectEntryCommand(const ObjectAddress *objectAddress); static int ExecuteCommandAsSuperuser(char *query, int paramCount, Oid *paramTypes, Datum *paramValues); @@ -357,6 +358,42 @@ ExecuteCommandAsSuperuser(char *query, int paramCount, Oid *paramTypes, } +/* + * UnmarkNodeWideObjectsDistributed deletes pg_dist_object records + * for all distributed objects in given Drop stmt node. + * + * Today we only expect DropRoleStmt and DropdbStmt to get here. + */ +void +UnmarkNodeWideObjectsDistributed(Node *node) +{ + if (IsA(node, DropRoleStmt)) + { + DropRoleStmt *stmt = castNode(DropRoleStmt, node); + List *allDropRoles = stmt->roles; + + List *distributedDropRoles = FilterDistributedRoles(allDropRoles); + if (list_length(distributedDropRoles) > 0) + { + UnmarkRolesDistributed(distributedDropRoles); + } + } + else if (IsA(node, DropdbStmt)) + { + DropdbStmt *stmt = castNode(DropdbStmt, node); + char *dbName = stmt->dbname; + + Oid dbOid = get_database_oid(dbName, stmt->missing_ok); + ObjectAddress *dbObjectAddress = palloc0(sizeof(ObjectAddress)); + ObjectAddressSet(*dbObjectAddress, DatabaseRelationId, dbOid); + if (IsAnyObjectDistributed(list_make1(dbObjectAddress))) + { + UnmarkObjectDistributed(dbObjectAddress); + } + } +} + + /* * UnmarkObjectDistributed removes the entry from pg_dist_object that marks this object as * distributed. This will prevent updates to that object to be propagated to the worker. diff --git a/src/backend/distributed/metadata/metadata_sync.c b/src/backend/distributed/metadata/metadata_sync.c index 53dc7e747..f04768457 100644 --- a/src/backend/distributed/metadata/metadata_sync.c +++ b/src/backend/distributed/metadata/metadata_sync.c @@ -30,12 +30,15 @@ #include "catalog/pg_attrdef.h" #include "catalog/pg_collation.h" #include "catalog/pg_constraint.h" +#include "catalog/pg_database.h" +#include "catalog/pg_database_d.h" #include "catalog/pg_depend.h" #include "catalog/pg_foreign_server.h" #include "catalog/pg_namespace.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" #include "commands/async.h" +#include "commands/dbcommands.h" #include "distributed/argutils.h" #include "distributed/backend_data.h" #include "distributed/citus_ruleutils.h" @@ -120,6 +123,7 @@ static List * GetObjectsForGrantStmt(ObjectType objectType, Oid objectId); static AccessPriv * GetAccessPrivObjectForGrantStmt(char *permission); static List * GenerateGrantOnSchemaQueriesFromAclItem(Oid schemaOid, AclItem *aclItem); +static List * GenerateGrantOnDatabaseFromAclItem(Oid databaseOid, AclItem *aclItem); static List * GenerateGrantOnFunctionQueriesFromAclItem(Oid schemaOid, AclItem *aclItem); static List * GrantOnSequenceDDLCommands(Oid sequenceOid); @@ -179,6 +183,7 @@ PG_FUNCTION_INFO_V1(citus_internal_delete_colocation_metadata); PG_FUNCTION_INFO_V1(citus_internal_add_tenant_schema); PG_FUNCTION_INFO_V1(citus_internal_delete_tenant_schema); PG_FUNCTION_INFO_V1(citus_internal_update_none_dist_table_metadata); +PG_FUNCTION_INFO_V1(citus_internal_database_command); static bool got_SIGTERM = false; @@ -2043,6 +2048,92 @@ GenerateGrantOnSchemaQueriesFromAclItem(Oid schemaOid, AclItem *aclItem) } +/* + * GrantOnDatabaseDDLCommands creates a list of ddl command for replicating the permissions + * of roles on databases. + */ +List * +GrantOnDatabaseDDLCommands(Oid databaseOid) +{ + HeapTuple databaseTuple = SearchSysCache1(DATABASEOID, ObjectIdGetDatum(databaseOid)); + bool isNull = true; + Datum aclDatum = SysCacheGetAttr(DATABASEOID, databaseTuple, Anum_pg_database_datacl, + &isNull); + if (isNull) + { + ReleaseSysCache(databaseTuple); + return NIL; + } + Acl *acl = DatumGetAclPCopy(aclDatum); + AclItem *aclDat = ACL_DAT(acl); + int aclNum = ACL_NUM(acl); + List *commands = NIL; + + ReleaseSysCache(databaseTuple); + + for (int i = 0; i < aclNum; i++) + { + commands = list_concat(commands, + GenerateGrantOnDatabaseFromAclItem( + databaseOid, &aclDat[i])); + } + + return commands; +} + + +/* + * GenerateGrantOnDatabaseFromAclItem generates a query string for replicating a users permissions + * on a database. + */ +List * +GenerateGrantOnDatabaseFromAclItem(Oid databaseOid, AclItem *aclItem) +{ + AclMode permissions = ACLITEM_GET_PRIVS(*aclItem) & ACL_ALL_RIGHTS_DATABASE; + AclMode grants = ACLITEM_GET_GOPTIONS(*aclItem) & ACL_ALL_RIGHTS_DATABASE; + + /* + * seems unlikely but we check if there is a grant option in the list without the actual permission + */ + Assert(!(grants & ACL_CONNECT) || (permissions & ACL_CONNECT)); + Assert(!(grants & ACL_CREATE) || (permissions & ACL_CREATE)); + Assert(!(grants & ACL_CREATE_TEMP) || (permissions & ACL_CREATE_TEMP)); + Oid granteeOid = aclItem->ai_grantee; + List *queries = NIL; + + queries = lappend(queries, GenerateSetRoleQuery(aclItem->ai_grantor)); + + if (permissions & ACL_CONNECT) + { + char *query = DeparseTreeNode((Node *) GenerateGrantStmtForRights( + OBJECT_DATABASE, granteeOid, databaseOid, + "CONNECT", + grants & ACL_CONNECT)); + queries = lappend(queries, query); + } + if (permissions & ACL_CREATE) + { + char *query = DeparseTreeNode((Node *) GenerateGrantStmtForRights( + OBJECT_DATABASE, granteeOid, databaseOid, + "CREATE", + grants & ACL_CREATE)); + queries = lappend(queries, query); + } + if (permissions & ACL_CREATE_TEMP) + { + char *query = DeparseTreeNode((Node *) GenerateGrantStmtForRights( + OBJECT_DATABASE, granteeOid, databaseOid, + "TEMPORARY", + grants & ACL_CREATE_TEMP)); + queries = lappend(queries, query); + } + + queries = lappend(queries, "RESET ROLE"); + + return queries; +} + + /* * GenerateGrantStmtForRights is the function for creating GrantStmt's for all * types of objects that are supported. It takes parameters to fill a GrantStmt's @@ -2116,6 +2207,11 @@ GetObjectsForGrantStmt(ObjectType objectType, Oid objectId) return list_make1(sequence); } + case OBJECT_DATABASE: + { + return list_make1(makeString(get_database_name(objectId))); + } + default: { elog(ERROR, "unsupported object type for GRANT"); @@ -3889,6 +3985,70 @@ citus_internal_update_none_dist_table_metadata(PG_FUNCTION_ARGS) } +/* + * citus_internal_database_command is an internal UDF to + * create a database in an idempotent maner without + * transaction block restrictions. + */ +Datum +citus_internal_database_command(PG_FUNCTION_ARGS) +{ + CheckCitusVersion(ERROR); + + if (!ShouldSkipMetadataChecks()) + { + EnsureCitusInitiatedOperation(); + } + + PG_ENSURE_ARGNOTNULL(0, "command"); + + text *commandText = PG_GETARG_TEXT_P(0); + char *command = text_to_cstring(commandText); + Node *parseTree = ParseTreeNode(command); + + int saveNestLevel = NewGUCNestLevel(); + + set_config_option("citus.enable_ddl_propagation", "off", + (superuser() ? PGC_SUSET : PGC_USERSET), PGC_S_SESSION, + GUC_ACTION_LOCAL, true, 0, false); + + set_config_option("citus.enable_create_database_propagation", "off", + (superuser() ? PGC_SUSET : PGC_USERSET), PGC_S_SESSION, + GUC_ACTION_LOCAL, true, 0, false); + + /* + * createdb() uses ParseState to report the error position for the + * input command and the position is reported to be 0 when it's provided as NULL. + * We're okay with that because we don't expect this UDF to be called with an incorrect + * DDL command. + */ + ParseState *pstate = NULL; + + if (IsA(parseTree, CreatedbStmt)) + { + CreatedbStmt *stmt = castNode(CreatedbStmt, parseTree); + + bool missingOk = true; + Oid databaseOid = get_database_oid(stmt->dbname, missingOk); + + if (!OidIsValid(databaseOid)) + { + createdb(pstate, (CreatedbStmt *) parseTree); + } + } + else + { + ereport(ERROR, (errmsg("citus_internal_database_command() can only be used " + "for CREATE DATABASE command by Citus."))); + } + + /* rollback GUCs to the state before this session */ + AtEOXact_GUC(true, saveNestLevel); + + PG_RETURN_VOID(); +} + + /* * SyncNewColocationGroup synchronizes a new pg_dist_colocation entry to a worker. */ diff --git a/src/backend/distributed/shared_library_init.c b/src/backend/distributed/shared_library_init.c index 22037c82b..dccc30e15 100644 --- a/src/backend/distributed/shared_library_init.c +++ b/src/backend/distributed/shared_library_init.c @@ -1274,6 +1274,17 @@ RegisterCitusConfigVariables(void) GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE, NULL, NULL, NULL); + DefineCustomBoolVariable( + "citus.enable_create_database_propagation", + gettext_noop("Enables propagating CREATE DATABASE " + "and DROP DATABASE statements to workers."), + NULL, + &EnableCreateDatabasePropagation, + false, + PGC_USERSET, + GUC_STANDARD, + NULL, NULL, NULL); + DefineCustomBoolVariable( "citus.enable_create_role_propagation", gettext_noop("Enables propagating CREATE ROLE " diff --git a/src/backend/distributed/sql/citus--12.1-1--12.2-1.sql b/src/backend/distributed/sql/citus--12.1-1--12.2-1.sql index ec4cc7134..63c4a527f 100644 --- a/src/backend/distributed/sql/citus--12.1-1--12.2-1.sql +++ b/src/backend/distributed/sql/citus--12.1-1--12.2-1.sql @@ -1,5 +1,5 @@ -- citus--12.1-1--12.2-1 - -- bump version to 12.2-1 +#include "udfs/citus_internal_database_command/12.2-1.sql" #include "udfs/citus_add_rebalance_strategy/12.2-1.sql" diff --git a/src/backend/distributed/sql/downgrades/citus--12.2-1--12.1-1.sql b/src/backend/distributed/sql/downgrades/citus--12.2-1--12.1-1.sql index 93d121a12..d18f7257b 100644 --- a/src/backend/distributed/sql/downgrades/citus--12.2-1--12.1-1.sql +++ b/src/backend/distributed/sql/downgrades/citus--12.2-1--12.1-1.sql @@ -1,3 +1,5 @@ -- citus--12.2-1--12.1-1 +DROP FUNCTION pg_catalog.citus_internal_database_command(text); + #include "../udfs/citus_add_rebalance_strategy/10.1-1.sql" diff --git a/src/backend/distributed/sql/udfs/citus_internal_database_command/12.2-1.sql b/src/backend/distributed/sql/udfs/citus_internal_database_command/12.2-1.sql new file mode 100644 index 000000000..9f6d873cc --- /dev/null +++ b/src/backend/distributed/sql/udfs/citus_internal_database_command/12.2-1.sql @@ -0,0 +1,10 @@ +-- +-- citus_internal_database_command run given database command without transaction block restriction. + +CREATE OR REPLACE FUNCTION pg_catalog.citus_internal_database_command(command text) + RETURNS void + LANGUAGE C + VOLATILE +AS 'MODULE_PATHNAME', $$citus_internal_database_command$$; +COMMENT ON FUNCTION pg_catalog.citus_internal_database_command(text) IS + 'run a database command without transaction block restrictions'; diff --git a/src/backend/distributed/sql/udfs/citus_internal_database_command/latest.sql b/src/backend/distributed/sql/udfs/citus_internal_database_command/latest.sql new file mode 100644 index 000000000..9f6d873cc --- /dev/null +++ b/src/backend/distributed/sql/udfs/citus_internal_database_command/latest.sql @@ -0,0 +1,10 @@ +-- +-- citus_internal_database_command run given database command without transaction block restriction. + +CREATE OR REPLACE FUNCTION pg_catalog.citus_internal_database_command(command text) + RETURNS void + LANGUAGE C + VOLATILE +AS 'MODULE_PATHNAME', $$citus_internal_database_command$$; +COMMENT ON FUNCTION pg_catalog.citus_internal_database_command(text) IS + 'run a database command without transaction block restrictions'; diff --git a/src/include/distributed/commands.h b/src/include/distributed/commands.h index df98e66a5..501fefedd 100644 --- a/src/include/distributed/commands.h +++ b/src/include/distributed/commands.h @@ -234,6 +234,18 @@ extern List * PreprocessAlterDatabaseRefreshCollStmt(Node *node, const char *que extern List * PreprocessAlterDatabaseSetStmt(Node *node, const char *queryString, ProcessUtilityContext processUtilityContext); +extern List * PreprocessCreateDatabaseStmt(Node *node, const char *queryString, + ProcessUtilityContext processUtilityContext); +extern List * PostprocessCreateDatabaseStmt(Node *node, const char *queryString); +extern List * PreprocessDropDatabaseStmt(Node *node, const char *queryString, + ProcessUtilityContext processUtilityContext); +extern List * DropDatabaseStmtObjectAddress(Node *node, bool missingOk, + bool isPostprocess); +extern List * CreateDatabaseStmtObjectAddress(Node *node, bool missingOk, + bool isPostprocess); +extern void EnsureSupportedCreateDatabaseCommand(CreatedbStmt *stmt); +extern char * CreateDatabaseDDLCommand(Oid dbId); + /* domain.c - forward declarations */ extern List * CreateDomainStmtObjectAddress(Node *node, bool missing_ok, bool diff --git a/src/include/distributed/commands/utility_hook.h b/src/include/distributed/commands/utility_hook.h index c474dcc43..caac002ed 100644 --- a/src/include/distributed/commands/utility_hook.h +++ b/src/include/distributed/commands/utility_hook.h @@ -40,6 +40,7 @@ typedef enum extern PropSetCmdBehavior PropagateSetCommands; extern bool EnableDDLPropagation; extern int CreateObjectPropagationMode; +extern bool EnableCreateDatabasePropagation; extern bool EnableCreateTypePropagation; extern bool EnableCreateRolePropagation; extern bool EnableAlterRolePropagation; @@ -93,6 +94,7 @@ extern void ProcessUtilityParseTree(Node *node, const char *queryString, extern void MarkInvalidateForeignKeyGraph(void); extern void InvalidateForeignKeyGraphForDDL(void); extern List * DDLTaskList(Oid relationId, const char *commandString); +extern List * NontransactionalNodeDDLTaskList(TargetWorkerSet targets, List *commands); extern List * NodeDDLTaskList(TargetWorkerSet targets, List *commands); extern bool AlterTableInProgress(void); extern bool DropSchemaOrDBInProgress(void); diff --git a/src/include/distributed/deparser.h b/src/include/distributed/deparser.h index aae526df4..f67e53238 100644 --- a/src/include/distributed/deparser.h +++ b/src/include/distributed/deparser.h @@ -121,6 +121,28 @@ extern void AppendGrantedByInGrant(StringInfo buf, GrantStmt *stmt); extern void AppendGrantSharedPrefix(StringInfo buf, GrantStmt *stmt); extern void AppendGrantSharedSuffix(StringInfo buf, GrantStmt *stmt); +/* Common deparser utils */ + +typedef struct DefElemOptionFormat +{ + char *name; + char *format; + int type; +} DefElemOptionFormat; + +typedef enum OptionFormatType +{ + OPTION_FORMAT_STRING, + OPTION_FORMAT_LITERAL_CSTR, + OPTION_FORMAT_BOOLEAN, + OPTION_FORMAT_INTEGER +} OptionFormatType; + + +extern void DefElemOptionToStatement(StringInfo buf, DefElem *option, + const DefElemOptionFormat *opt_formats, + int opt_formats_len); + /* forward declarations for deparse_statistics_stmts.c */ extern char * DeparseCreateStatisticsStmt(Node *node); @@ -227,6 +249,8 @@ extern char * DeparseGrantOnDatabaseStmt(Node *node); extern char * DeparseAlterDatabaseStmt(Node *node); extern char * DeparseAlterDatabaseRefreshCollStmt(Node *node); extern char * DeparseAlterDatabaseSetStmt(Node *node); +extern char * DeparseCreateDatabaseStmt(Node *node); +extern char * DeparseDropDatabaseStmt(Node *node); /* forward declaration for deparse_publication_stmts.c */ diff --git a/src/include/distributed/metadata/distobject.h b/src/include/distributed/metadata/distobject.h index de56c0e1f..cf24a8c81 100644 --- a/src/include/distributed/metadata/distobject.h +++ b/src/include/distributed/metadata/distobject.h @@ -26,6 +26,7 @@ extern void MarkObjectDistributed(const ObjectAddress *distAddress); extern void MarkObjectDistributedViaSuperUser(const ObjectAddress *distAddress); extern void MarkObjectDistributedLocally(const ObjectAddress *distAddress); extern void UnmarkObjectDistributed(const ObjectAddress *address); +extern void UnmarkNodeWideObjectsDistributed(Node *node); extern bool IsTableOwnedByExtension(Oid relationId); extern bool ObjectAddressDependsOnExtension(const ObjectAddress *target); extern bool IsAnyObjectAddressOwnedByExtension(const List *targets, diff --git a/src/include/distributed/metadata_sync.h b/src/include/distributed/metadata_sync.h index 237df363a..7b993ec31 100644 --- a/src/include/distributed/metadata_sync.h +++ b/src/include/distributed/metadata_sync.h @@ -107,6 +107,7 @@ extern char * ColocationIdUpdateCommand(Oid relationId, uint32 colocationId); extern char * CreateSchemaDDLCommand(Oid schemaId); extern List * GrantOnSchemaDDLCommands(Oid schemaId); extern List * GrantOnFunctionDDLCommands(Oid functionOid); +extern List * GrantOnDatabaseDDLCommands(Oid databaseOid); extern List * GrantOnForeignServerDDLCommands(Oid serverId); extern List * GenerateGrantOnForeignServerQueriesFromAclItem(Oid serverId, AclItem *aclItem); diff --git a/src/test/regress/expected/create_drop_database_propagation.out b/src/test/regress/expected/create_drop_database_propagation.out new file mode 100644 index 000000000..e0172f3e8 --- /dev/null +++ b/src/test/regress/expected/create_drop_database_propagation.out @@ -0,0 +1,962 @@ +-- Test for create/drop database propagation. +-- This test is only executes for Postgres versions < 15. +-- For versions >= 15, pg15_create_drop_database_propagation.sql is used. +-- For versions >= 16, pg16_create_drop_database_propagation.sql is used. +-- Test the UDF that we use to issue database command during metadata sync. +SELECT pg_catalog.citus_internal_database_command(null); +ERROR: This is an internal Citus function can only be used in a distributed transaction +CREATE ROLE test_db_commands WITH LOGIN; +ALTER SYSTEM SET citus.enable_manual_metadata_changes_for_user TO 'test_db_commands'; +SELECT pg_reload_conf(); + pg_reload_conf +--------------------------------------------------------------------- + t +(1 row) + +SELECT pg_sleep(0.1); + pg_sleep +--------------------------------------------------------------------- + +(1 row) + +SET ROLE test_db_commands; +-- fails on null input +SELECT pg_catalog.citus_internal_database_command(null); +ERROR: command cannot be NULL +-- fails on non create / drop db command +SELECT pg_catalog.citus_internal_database_command('CREATE TABLE foo_bar(a int)'); +ERROR: citus_internal_database_command() can only be used for CREATE DATABASE command by Citus. +SELECT pg_catalog.citus_internal_database_command('SELECT 1'); +ERROR: citus_internal_database_command() can only be used for CREATE DATABASE command by Citus. +SELECT pg_catalog.citus_internal_database_command('asfsfdsg'); +ERROR: syntax error at or near "asfsfdsg" +SELECT pg_catalog.citus_internal_database_command(''); +ERROR: cannot execute multiple utility events +RESET ROLE; +ALTER ROLE test_db_commands nocreatedb; +SET ROLE test_db_commands; +-- make sure that pg_catalog.citus_internal_database_command doesn't cause privilege escalation +SELECT pg_catalog.citus_internal_database_command('CREATE DATABASE no_permissions'); +ERROR: permission denied to create database +RESET ROLE; +DROP USER test_db_commands; +ALTER SYSTEM RESET citus.enable_manual_metadata_changes_for_user; +SELECT pg_reload_conf(); + pg_reload_conf +--------------------------------------------------------------------- + t +(1 row) + +SELECT pg_sleep(0.1); + pg_sleep +--------------------------------------------------------------------- + +(1 row) + +\set create_drop_db_tablespace :abs_srcdir '/tmp_check/ts3' +CREATE TABLESPACE create_drop_db_tablespace LOCATION :'create_drop_db_tablespace'; +\c - - - :worker_1_port +\set create_drop_db_tablespace :abs_srcdir '/tmp_check/ts4' +CREATE TABLESPACE create_drop_db_tablespace LOCATION :'create_drop_db_tablespace'; +\c - - - :worker_2_port +\set create_drop_db_tablespace :abs_srcdir '/tmp_check/ts5' +CREATE TABLESPACE create_drop_db_tablespace LOCATION :'create_drop_db_tablespace'; +\c - - - :master_port +CREATE DATABASE local_database; +NOTICE: Citus partially supports CREATE DATABASE for distributed databases +DETAIL: Citus does not propagate CREATE DATABASE command to workers +HINT: You can manually create a database and its extensions on workers. +-- check that it's only created for coordinator +SELECT * FROM public.check_database_on_all_nodes('local_database') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "local_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +DROP DATABASE local_database; +-- and is dropped +SELECT * FROM public.check_database_on_all_nodes('local_database') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +\c - - - :worker_1_port +CREATE DATABASE local_database; +NOTICE: Citus partially supports CREATE DATABASE for distributed databases +DETAIL: Citus does not propagate CREATE DATABASE command to workers +HINT: You can manually create a database and its extensions on workers. +-- check that it's only created for coordinator +SELECT * FROM public.check_database_on_all_nodes('local_database') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (local) | {"database_properties": {"datacl": null, "datname": "local_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +DROP DATABASE local_database; +-- and is dropped +SELECT * FROM public.check_database_on_all_nodes('local_database') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (local) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +\c - - - :master_port +create user create_drop_db_test_user; +set citus.enable_create_database_propagation=on; +-- Tests for create database propagation with template0 which should fail +CREATE DATABASE mydatabase + WITH OWNER = create_drop_db_test_user + TEMPLATE = 'template0' + ENCODING = 'UTF8' + CONNECTION LIMIT = 10 + TABLESPACE = create_drop_db_tablespace + ALLOW_CONNECTIONS = true + IS_TEMPLATE = false; +ERROR: Only template1 is supported as template parameter for CREATE DATABASE +CREATE DATABASE mydatabase_1 + WITH template=template1 + OWNER = create_drop_db_test_user + ENCODING = 'UTF8' + CONNECTION LIMIT = 10 + TABLESPACE = create_drop_db_tablespace + ALLOW_CONNECTIONS = true + IS_TEMPLATE = false; +SELECT * FROM public.check_database_on_all_nodes('mydatabase_1') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "mydatabase_1", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "daticurules": null, "datallowconn": true, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase_1", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "daticurules": null, "datallowconn": true, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase_1", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "daticurules": null, "datallowconn": true, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +-- Test LC / LOCALE settings that don't match the ones provided in template db. +-- All should throw an error on the coordinator. +CREATE DATABASE lc_collate_test LC_COLLATE = 'C.UTF-8'; +ERROR: new collation (C.UTF-8) is incompatible with the collation of the template database (C) +HINT: Use the same collation as in the template database, or use template0 as template. +CREATE DATABASE lc_ctype_test LC_CTYPE = 'C.UTF-8'; +ERROR: new LC_CTYPE (C.UTF-8) is incompatible with the LC_CTYPE of the template database (C) +HINT: Use the same LC_CTYPE as in the template database, or use template0 as template. +CREATE DATABASE locale_test LOCALE = 'C.UTF-8'; +ERROR: new collation (C.UTF-8) is incompatible with the collation of the template database (C) +HINT: Use the same collation as in the template database, or use template0 as template. +CREATE DATABASE lc_collate_lc_ctype_test LC_COLLATE = 'C.UTF-8' LC_CTYPE = 'C.UTF-8'; +ERROR: new collation (C.UTF-8) is incompatible with the collation of the template database (C) +HINT: Use the same collation as in the template database, or use template0 as template. +-- Test LC / LOCALE settings that match the ones provided in template db. +CREATE DATABASE lc_collate_test LC_COLLATE = 'C'; +CREATE DATABASE lc_ctype_test LC_CTYPE = 'C'; +CREATE DATABASE locale_test LOCALE = 'C'; +CREATE DATABASE lc_collate_lc_ctype_test LC_COLLATE = 'C' LC_CTYPE = 'C'; +SELECT * FROM public.check_database_on_all_nodes('lc_collate_test') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "lc_collate_test", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "lc_collate_test", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "lc_collate_test", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +SELECT * FROM public.check_database_on_all_nodes('lc_ctype_test') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "lc_ctype_test", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "lc_ctype_test", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "lc_ctype_test", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +SELECT * FROM public.check_database_on_all_nodes('locale_test') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "locale_test", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "locale_test", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "locale_test", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +SELECT * FROM public.check_database_on_all_nodes('lc_collate_lc_ctype_test') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "lc_collate_lc_ctype_test", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "lc_collate_lc_ctype_test", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "lc_collate_lc_ctype_test", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +DROP DATABASE lc_collate_test; +DROP DATABASE lc_ctype_test; +DROP DATABASE locale_test; +DROP DATABASE lc_collate_lc_ctype_test; +-- ALTER TABLESPACE .. RENAME TO .. is not supported, so we need to rename it manually. +SELECT result FROM run_command_on_all_nodes( + $$ + ALTER TABLESPACE create_drop_db_tablespace RENAME TO "ts-needs\!escape" + $$ +); + result +--------------------------------------------------------------------- + ALTER TABLESPACE + ALTER TABLESPACE + ALTER TABLESPACE +(3 rows) + +CREATE USER "role-needs\!escape"; +CREATE DATABASE "db-needs\!escape" owner "role-needs\!escape" tablespace "ts-needs\!escape"; +-- Rename it to make check_database_on_all_nodes happy. +-- Today we don't support ALTER DATABASE .. RENAME TO .., so need to propagate it manually. +SELECT result FROM run_command_on_all_nodes( + $$ + ALTER DATABASE "db-needs\!escape" RENAME TO db_needs_escape + $$ +); + result +--------------------------------------------------------------------- + ALTER DATABASE + ALTER DATABASE + ALTER DATABASE +(3 rows) + +SELECT * FROM public.check_database_on_all_nodes('db_needs_escape') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "db_needs_escape", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "role-needs\\!escape", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "db_needs_escape", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "role-needs\\!escape", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "db_needs_escape", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "role-needs\\!escape", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +-- test database syncing after node addition +select 1 from citus_remove_node('localhost', :worker_2_port); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +--test with is_template true and allow connections false +CREATE DATABASE mydatabase + OWNER = create_drop_db_test_user + CONNECTION LIMIT = 10 + ENCODING = 'UTF8' + TABLESPACE = "ts-needs\!escape" + ALLOW_CONNECTIONS = false + IS_TEMPLATE = false; +SELECT * FROM public.check_database_on_all_nodes('mydatabase') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(2 rows) + +SET citus.metadata_sync_mode to 'transactional'; +select 1 from citus_add_node('localhost', :worker_2_port); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +SELECT * FROM public.check_database_on_all_nodes('mydatabase') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +SELECT * FROM public.check_database_on_all_nodes('mydatabase_1') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "mydatabase_1", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase_1", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase_1", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +SELECT * FROM public.check_database_on_all_nodes('db_needs_escape') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "db_needs_escape", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "role-needs\\!escape", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "db_needs_escape", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "role-needs\\!escape", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "db_needs_escape", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "role-needs\\!escape", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +select 1 from citus_remove_node('localhost', :worker_2_port); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +SET citus.metadata_sync_mode to 'nontransactional'; +select 1 from citus_add_node('localhost', :worker_2_port); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +RESET citus.metadata_sync_mode; +SELECT * FROM public.check_database_on_all_nodes('mydatabase') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +SELECT * FROM public.check_database_on_all_nodes('mydatabase_1') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "mydatabase_1", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase_1", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase_1", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +SELECT * FROM public.check_database_on_all_nodes('db_needs_escape') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "db_needs_escape", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "role-needs\\!escape", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "db_needs_escape", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "role-needs\\!escape", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "db_needs_escape", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "role-needs\\!escape", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +SELECT citus_disable_node_and_wait('localhost', :worker_1_port, true); + citus_disable_node_and_wait +--------------------------------------------------------------------- + +(1 row) + +CREATE DATABASE test_node_activation; +SELECT 1 FROM citus_activate_node('localhost', :worker_1_port); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +SELECT * FROM public.check_database_on_all_nodes('mydatabase') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +SELECT * FROM public.check_database_on_all_nodes('mydatabase_1') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "mydatabase_1", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase_1", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "mydatabase_1", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": 10, "daticulocale": null, "datistemplate": false, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +SELECT * FROM public.check_database_on_all_nodes('db_needs_escape') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "db_needs_escape", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "role-needs\\!escape", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "db_needs_escape", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "role-needs\\!escape", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "db_needs_escape", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "role-needs\\!escape", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +SELECT * FROM public.check_database_on_all_nodes('test_node_activation') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "test_node_activation", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "test_node_activation", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "test_node_activation", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database mydatabase; +NOTICE: issuing DROP DATABASE mydatabase +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +NOTICE: issuing DROP DATABASE mydatabase +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +SET citus.log_remote_commands = false; +-- check that we actually drop the database +drop database mydatabase_1; +SELECT * FROM public.check_database_on_all_nodes('mydatabase_1') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +SELECT * FROM public.check_database_on_all_nodes('mydatabase') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +-- create a template database with all options set and allow connections false +CREATE DATABASE my_template_database + WITH OWNER = create_drop_db_test_user + ENCODING = 'UTF8' + TABLESPACE = "ts-needs\!escape" + ALLOW_CONNECTIONS = false + IS_TEMPLATE = true; +SELECT * FROM public.check_database_on_all_nodes('my_template_database') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": -1, "daticulocale": null, "datistemplate": true, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": -1, "daticulocale": null, "datistemplate": true, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "ts-needs\\!escape", "daticurules": null, "datallowconn": false, "datconnlimit": -1, "daticulocale": null, "datistemplate": true, "database_owner": "create_drop_db_test_user", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +--template databases could not be dropped so we need to change the template flag +SELECT result from run_command_on_all_nodes( + $$ + UPDATE pg_database SET datistemplate = false WHERE datname = 'my_template_database' + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + UPDATE 1 + UPDATE 1 + UPDATE 1 +(3 rows) + +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database my_template_database; +NOTICE: issuing DROP DATABASE my_template_database +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +NOTICE: issuing DROP DATABASE my_template_database +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +SET citus.log_remote_commands = false; +SELECT * FROM public.check_database_on_all_nodes('my_template_database') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +--tests for special characters in database name +set citus.enable_create_database_propagation=on; +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%CREATE DATABASE%'; +create database "mydatabase#1'2"; +NOTICE: issuing CREATE DATABASE "mydatabase#1'2" +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +NOTICE: issuing CREATE DATABASE "mydatabase#1'2" +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database if exists "mydatabase#1'2"; +NOTICE: issuing DROP DATABASE IF EXISTS "mydatabase#1'2" +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +NOTICE: issuing DROP DATABASE IF EXISTS "mydatabase#1'2" +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +reset citus.grep_remote_commands; +reset citus.log_remote_commands; +-- it doesn't fail thanks to "if exists" +drop database if exists "mydatabase#1'2"; +NOTICE: database "mydatabase#1'2" does not exist, skipping +-- recreate it to verify that it's actually dropped +create database "mydatabase#1'2"; +drop database "mydatabase#1'2"; +-- second time we try to drop it, it fails due to lack of "if exists" +drop database "mydatabase#1'2"; +ERROR: database "mydatabase#1'2" does not exist +\c - - - :worker_1_port +SET citus.enable_create_database_propagation TO ON; +-- show that dropping the database from workers is not allowed when citus.enable_create_database_propagation is on +DROP DATABASE db_needs_escape; +ERROR: operation is not allowed on this node +HINT: Connect to the coordinator and run it again. +-- and the same applies to create database too +create database error_test; +ERROR: operation is not allowed on this node +HINT: Connect to the coordinator and run it again. +\c - - - :master_port +SET citus.enable_create_database_propagation TO ON; +DROP DATABASE test_node_activation; +DROP DATABASE db_needs_escape; +DROP USER "role-needs\!escape"; +-- drop database with force options test +create database db_force_test; +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database db_force_test with (force); +NOTICE: issuing DROP DATABASE db_force_test WITH ( FORCE ) +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +NOTICE: issuing DROP DATABASE db_force_test WITH ( FORCE ) +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +reset citus.log_remote_commands; +reset citus.grep_remote_commands; +SELECT * FROM public.check_database_on_all_nodes('db_force_test') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +-- test that we won't propagate non-distributed databases in citus_add_node +select 1 from citus_remove_node('localhost', :worker_2_port); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +SET citus.enable_create_database_propagation TO off; +CREATE DATABASE non_distributed_db; +NOTICE: Citus partially supports CREATE DATABASE for distributed databases +DETAIL: Citus does not propagate CREATE DATABASE command to workers +HINT: You can manually create a database and its extensions on workers. +SET citus.enable_create_database_propagation TO on; +create database distributed_db; +select 1 from citus_add_node('localhost', :worker_2_port); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +--non_distributed_db should not be propagated to worker_2 +SELECT * FROM public.check_database_on_all_nodes('non_distributed_db') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "non_distributed_db", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +--distributed_db should be propagated to worker_2 +SELECT * FROM public.check_database_on_all_nodes('distributed_db') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "distributed_db", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "distributed_db", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "distributed_db", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +--clean up resources created by this test +drop database distributed_db; +set citus.enable_create_database_propagation TO off; +drop database non_distributed_db; +-- test role grants on DATABASE in metadata sync +SELECT result from run_command_on_all_nodes( + $$ + create database db_role_grants_test_non_distributed + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + CREATE DATABASE + CREATE DATABASE + CREATE DATABASE +(3 rows) + +SELECT result from run_command_on_all_nodes( + $$ + revoke connect,temp,temporary,create on database db_role_grants_test_non_distributed from public + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + ERROR: operation is not allowed on this node + ERROR: operation is not allowed on this node + REVOKE +(3 rows) + +SET citus.enable_create_database_propagation TO on; +CREATE ROLE db_role_grants_test_role_exists_on_node_2; +select 1 from citus_remove_node('localhost', :worker_2_port); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +CREATE DATABASE db_role_grants_test; +revoke connect,temp,temporary,create on database db_role_grants_test from public; +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%CREATE ROLE%'; +CREATE ROLE db_role_grants_test_role_missing_on_node_2; +NOTICE: issuing SELECT worker_create_or_alter_role('db_role_grants_test_role_missing_on_node_2', 'CREATE ROLE db_role_grants_test_role_missing_on_node_2', 'ALTER ROLE db_role_grants_test_role_missing_on_node_2') +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +RESET citus.log_remote_commands ; +RESET citus.grep_remote_commands; +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%GRANT%'; +grant CONNECT,TEMPORARY,CREATE on DATABASE db_role_grants_test to db_role_grants_test_role_exists_on_node_2; +NOTICE: issuing GRANT connect, temporary, create ON DATABASE db_role_grants_test TO db_role_grants_test_role_exists_on_node_2; +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +grant CONNECT,TEMPORARY,CREATE on DATABASE db_role_grants_test to db_role_grants_test_role_missing_on_node_2; +NOTICE: issuing GRANT connect, temporary, create ON DATABASE db_role_grants_test TO db_role_grants_test_role_missing_on_node_2; +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +grant CONNECT,TEMPORARY,CREATE on DATABASE db_role_grants_test_non_distributed to db_role_grants_test_role_exists_on_node_2; +NOTICE: issuing GRANT connect, temporary, create ON DATABASE db_role_grants_test_non_distributed TO db_role_grants_test_role_exists_on_node_2; +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +grant CONNECT,TEMPORARY,CREATE on DATABASE db_role_grants_test_non_distributed to db_role_grants_test_role_missing_on_node_2; +NOTICE: issuing GRANT connect, temporary, create ON DATABASE db_role_grants_test_non_distributed TO db_role_grants_test_role_missing_on_node_2; +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +-- check the privileges before add_node for database db_role_grants_test, +-- role db_role_grants_test_role_exists_on_node_2 +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test', 'CREATE') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t +(2 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test', 'TEMPORARY') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t +(2 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test', 'CONNECT') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t +(2 rows) + +-- check the privileges before add_node for database db_role_grants_test, +-- role db_role_grants_test_role_missing_on_node_2 +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test', 'CREATE') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t +(2 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test', 'TEMPORARY') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t +(2 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test', 'CONNECT') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t +(2 rows) + +-- check the privileges before add_node for database db_role_grants_test_non_distributed, +-- role db_role_grants_test_role_exists_on_node_2 +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test_non_distributed', 'CREATE') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t +(2 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test_non_distributed', 'TEMPORARY') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t +(2 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test_non_distributed', 'CONNECT') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t +(2 rows) + +-- check the privileges before add_node for database db_role_grants_test_non_distributed, +-- role db_role_grants_test_role_missing_on_node_2 +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test_non_distributed', 'CREATE') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t +(2 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test_non_distributed', 'TEMPORARY') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t +(2 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test_non_distributed', 'CONNECT') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t +(2 rows) + +RESET citus.log_remote_commands; +RESET citus.grep_remote_commands; +select 1 from citus_add_node('localhost', :worker_2_port); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +-- check the privileges after add_node for database db_role_grants_test, +-- role db_role_grants_test_role_exists_on_node_2 +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test', 'CREATE') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t + t +(3 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test', 'TEMPORARY') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t + t +(3 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test', 'CONNECT') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t + t +(3 rows) + +-- check the privileges after add_node for database db_role_grants_test, +-- role db_role_grants_test_role_missing_on_node_2 +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test', 'CREATE') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t + t +(3 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test', 'TEMPORARY') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t + t +(3 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test', 'CONNECT') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + t + t + t +(3 rows) + +-- check the privileges after add_node for database db_role_grants_test_non_distributed, +-- role db_role_grants_test_role_exists_on_node_2 +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test_non_distributed', 'CREATE') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + f + t + t +(3 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test_non_distributed', 'TEMPORARY') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + f + t + t +(3 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test_non_distributed', 'CONNECT') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + f + t + t +(3 rows) + +-- check the privileges after add_node for database db_role_grants_test_non_distributed, +-- role db_role_grants_test_role_missing_on_node_2 +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test_non_distributed', 'CREATE') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + f + t + t +(3 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test_non_distributed', 'TEMPORARY') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + f + t + t +(3 rows) + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test_non_distributed', 'CONNECT') + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + f + t + t +(3 rows) + +grant connect,temp,temporary,create on database db_role_grants_test to public; +DROP DATABASE db_role_grants_test; +SELECT result from run_command_on_all_nodes( + $$ + drop database db_role_grants_test_non_distributed + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + DROP DATABASE + DROP DATABASE + DROP DATABASE +(3 rows) + +DROP ROLE db_role_grants_test_role_exists_on_node_2; +DROP ROLE db_role_grants_test_role_missing_on_node_2; +select 1 from citus_remove_node('localhost', :worker_2_port); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +set citus.enable_create_role_propagation TO off; +create role non_propagated_role; +NOTICE: not propagating CREATE ROLE/USER commands to other nodes +HINT: Connect to other nodes directly to manually create all necessary users and roles. +set citus.enable_create_role_propagation TO on; +set citus.enable_create_database_propagation TO on; +-- Make sure that we propagate non_propagated_role because it's a dependency of test_db. +-- And hence it becomes a distributed object. +create database test_db OWNER non_propagated_role; +create role propagated_role; +grant connect on database test_db to propagated_role; +SELECT 1 FROM citus_add_node('localhost', :worker_2_port); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +SELECT * FROM public.check_database_on_all_nodes('test_db') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": ["=Tc/non_propagated_role", "non_propagated_role=CTc/non_propagated_role", "propagated_role=c/non_propagated_role"], "datname": "test_db", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "non_propagated_role", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": ["=Tc/non_propagated_role", "non_propagated_role=CTc/non_propagated_role", "propagated_role=c/non_propagated_role"], "datname": "test_db", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "non_propagated_role", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": ["=Tc/non_propagated_role", "non_propagated_role=CTc/non_propagated_role", "propagated_role=c/non_propagated_role"], "datname": "test_db", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "non_propagated_role", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +REVOKE CONNECT ON DATABASE test_db FROM propagated_role; +DROP DATABASE test_db; +DROP ROLE propagated_role, non_propagated_role; +--clean up resources created by this test +-- DROP TABLESPACE is not supported, so we need to drop it manually. +SELECT result FROM run_command_on_all_nodes( + $$ + drop tablespace "ts-needs\!escape" + $$ +); + result +--------------------------------------------------------------------- + DROP TABLESPACE + DROP TABLESPACE + DROP TABLESPACE +(3 rows) + +drop user create_drop_db_test_user; +reset citus.enable_create_database_propagation; diff --git a/src/test/regress/expected/create_drop_database_propagation_pg15.out b/src/test/regress/expected/create_drop_database_propagation_pg15.out new file mode 100644 index 000000000..9a501558a --- /dev/null +++ b/src/test/regress/expected/create_drop_database_propagation_pg15.out @@ -0,0 +1,82 @@ +-- +-- PG15 +-- +SHOW server_version \gset +SELECT substring(:'server_version', '\d+')::int >= 15 AS server_version_ge_15 +\gset +\if :server_version_ge_15 +\else +\q +\endif +-- create/drop database for pg >= 15 +set citus.enable_create_database_propagation=on; +CREATE DATABASE mydatabase + WITH OID = 966345; +ERROR: CREATE DATABASE option "oid" is not supported +CREATE DATABASE mydatabase + WITH strategy file_copy; +ERROR: Only wal_log is supported as strategy parameter for CREATE DATABASE +CREATE DATABASE st_wal_log + WITH strategy WaL_LoG; +SELECT * FROM public.check_database_on_all_nodes('st_wal_log') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "st_wal_log", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "st_wal_log", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "st_wal_log", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +drop database st_wal_log; +select 1 from citus_remove_node('localhost', :worker_2_port); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +-- test COLLATION_VERSION +CREATE DATABASE test_collation_version + WITH ENCODING = 'UTF8' + COLLATION_VERSION = '1.0' + ALLOW_CONNECTIONS = false; +select 1 from citus_add_node('localhost', :worker_2_port); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + +SELECT * FROM public.check_database_on_all_nodes('test_collation_version') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "test_collation_version", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": false, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": "1.0", "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "test_collation_version", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": false, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": "1.0", "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "test_collation_version", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": false, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": "1.0", "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +drop database test_collation_version; +SET client_min_messages TO WARNING; +-- test LOCALE_PROVIDER & ICU_LOCALE +CREATE DATABASE test_locale_provider + WITH ENCODING = 'UTF8' + LOCALE_PROVIDER = 'icu' + ICU_LOCALE = 'en_US'; +ERROR: new locale provider (icu) does not match locale provider of the template database (libc) +HINT: Use the same locale provider as in the template database, or use template0 as template. +RESET client_min_messages; +CREATE DATABASE test_locale_provider + WITH ENCODING = 'UTF8' + LOCALE_PROVIDER = 'libc' + ICU_LOCALE = 'en_US'; +ERROR: ICU locale cannot be specified unless locale provider is ICU +CREATE DATABASE test_locale_provider + WITH ENCODING = 'UTF8' + LOCALE_PROVIDER = 'libc'; +SELECT * FROM public.check_database_on_all_nodes('test_locale_provider') ORDER BY node_type; + node_type | result +--------------------------------------------------------------------- + coordinator (local) | {"database_properties": {"datacl": null, "datname": "test_locale_provider", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "test_locale_provider", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} + worker node (remote) | {"database_properties": {"datacl": null, "datname": "test_locale_provider", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false} +(3 rows) + +drop database test_locale_provider; +\c - - - :master_port diff --git a/src/test/regress/expected/create_drop_database_propagation_pg15_0.out b/src/test/regress/expected/create_drop_database_propagation_pg15_0.out new file mode 100644 index 000000000..b1ed9cc5b --- /dev/null +++ b/src/test/regress/expected/create_drop_database_propagation_pg15_0.out @@ -0,0 +1,9 @@ +-- +-- PG15 +-- +SHOW server_version \gset +SELECT substring(:'server_version', '\d+')::int >= 15 AS server_version_ge_15 +\gset +\if :server_version_ge_15 +\else +\q diff --git a/src/test/regress/expected/create_drop_database_propagation_pg16.out b/src/test/regress/expected/create_drop_database_propagation_pg16.out new file mode 100644 index 000000000..75cd99e61 --- /dev/null +++ b/src/test/regress/expected/create_drop_database_propagation_pg16.out @@ -0,0 +1,23 @@ +-- +-- PG16 +-- +SHOW server_version \gset +SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16 +\gset +\if :server_version_ge_16 +\else +\q +\endif +-- create/drop database for pg >= 16 +set citus.enable_create_database_propagation=on; +-- test icu_rules +-- +-- practically we don't support it but better to test +CREATE DATABASE citus_icu_rules_test WITH icu_rules='de_DE@collation=phonebook'; +ERROR: ICU rules cannot be specified unless locale provider is ICU +CREATE DATABASE citus_icu_rules_test WITH icu_rules='de_DE@collation=phonebook' locale_provider='icu'; +ERROR: LOCALE or ICU_LOCALE must be specified +CREATE DATABASE citus_icu_rules_test WITH icu_rules='de_DE@collation=phonebook' locale_provider='icu' icu_locale = 'de_DE'; +NOTICE: using standard form "de-DE" for ICU locale "de_DE" +ERROR: new locale provider (icu) does not match locale provider of the template database (libc) +HINT: Use the same locale provider as in the template database, or use template0 as template. diff --git a/src/test/regress/expected/create_drop_database_propagation_pg16_0.out b/src/test/regress/expected/create_drop_database_propagation_pg16_0.out new file mode 100644 index 000000000..730c916ca --- /dev/null +++ b/src/test/regress/expected/create_drop_database_propagation_pg16_0.out @@ -0,0 +1,9 @@ +-- +-- PG16 +-- +SHOW server_version \gset +SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16 +\gset +\if :server_version_ge_16 +\else +\q diff --git a/src/test/regress/expected/failure_create_index_concurrently.out b/src/test/regress/expected/failure_create_index_concurrently.out index a198ddc70..784c91aec 100644 --- a/src/test/regress/expected/failure_create_index_concurrently.out +++ b/src/test/regress/expected/failure_create_index_concurrently.out @@ -26,8 +26,9 @@ SELECT citus.mitmproxy('conn.onQuery(query="CREATE").kill()'); (1 row) CREATE INDEX CONCURRENTLY idx_index_test ON index_test(id, value_1); -WARNING: CONCURRENTLY-enabled index commands can fail partially, leaving behind an INVALID index. -Use DROP INDEX CONCURRENTLY IF EXISTS to remove the invalid index. +WARNING: Commands that are not transaction-safe may result in partial failure, potentially leading to an inconsistent state. +If the problematic command is a CREATE operation, consider using the 'IF EXISTS' syntax to drop the object, +if applicable, and then re-attempt the original command. ERROR: connection to the remote node localhost:xxxxx failed with the following error: connection not open SELECT citus.mitmproxy('conn.allow()'); mitmproxy @@ -59,8 +60,9 @@ SELECT citus.mitmproxy('conn.onQuery(query="CREATE").kill()'); (1 row) CREATE INDEX CONCURRENTLY idx_index_test ON index_test(id, value_1); -WARNING: CONCURRENTLY-enabled index commands can fail partially, leaving behind an INVALID index. -Use DROP INDEX CONCURRENTLY IF EXISTS to remove the invalid index. +WARNING: Commands that are not transaction-safe may result in partial failure, potentially leading to an inconsistent state. +If the problematic command is a CREATE operation, consider using the 'IF EXISTS' syntax to drop the object, +if applicable, and then re-attempt the original command. ERROR: connection to the remote node localhost:xxxxx failed with the following error: connection not open SELECT citus.mitmproxy('conn.allow()'); mitmproxy @@ -86,8 +88,9 @@ SELECT citus.mitmproxy('conn.onQuery(query="CREATE").cancel(' || pg_backend_pid( (1 row) CREATE INDEX CONCURRENTLY idx_index_test ON index_test(id, value_1); -WARNING: CONCURRENTLY-enabled index commands can fail partially, leaving behind an INVALID index. -Use DROP INDEX CONCURRENTLY IF EXISTS to remove the invalid index. +WARNING: Commands that are not transaction-safe may result in partial failure, potentially leading to an inconsistent state. +If the problematic command is a CREATE operation, consider using the 'IF EXISTS' syntax to drop the object, +if applicable, and then re-attempt the original command. ERROR: canceling statement due to user request SELECT citus.mitmproxy('conn.allow()'); mitmproxy @@ -111,8 +114,9 @@ SELECT citus.mitmproxy('conn.onQuery(query="CREATE").cancel(' || pg_backend_pid( (1 row) CREATE INDEX CONCURRENTLY idx_index_test ON index_test(id, value_1); -WARNING: CONCURRENTLY-enabled index commands can fail partially, leaving behind an INVALID index. -Use DROP INDEX CONCURRENTLY IF EXISTS to remove the invalid index. +WARNING: Commands that are not transaction-safe may result in partial failure, potentially leading to an inconsistent state. +If the problematic command is a CREATE operation, consider using the 'IF EXISTS' syntax to drop the object, +if applicable, and then re-attempt the original command. ERROR: canceling statement due to user request SELECT citus.mitmproxy('conn.allow()'); mitmproxy @@ -137,8 +141,9 @@ SELECT citus.mitmproxy('conn.onQuery(query="DROP INDEX CONCURRENTLY").kill()'); (1 row) DROP INDEX CONCURRENTLY IF EXISTS idx_index_test; -WARNING: CONCURRENTLY-enabled index commands can fail partially, leaving behind an INVALID index. -Use DROP INDEX CONCURRENTLY IF EXISTS to remove the invalid index. +WARNING: Commands that are not transaction-safe may result in partial failure, potentially leading to an inconsistent state. +If the problematic command is a CREATE operation, consider using the 'IF EXISTS' syntax to drop the object, +if applicable, and then re-attempt the original command. ERROR: connection to the remote node localhost:xxxxx failed with the following error: connection not open SELECT citus.mitmproxy('conn.allow()'); mitmproxy @@ -164,8 +169,9 @@ SELECT create_distributed_table('index_test_2', 'a'); INSERT INTO index_test_2 VALUES (1, 1), (1, 2); CREATE UNIQUE INDEX CONCURRENTLY index_test_2_a_idx ON index_test_2(a); -WARNING: CONCURRENTLY-enabled index commands can fail partially, leaving behind an INVALID index. -Use DROP INDEX CONCURRENTLY IF EXISTS to remove the invalid index. +WARNING: Commands that are not transaction-safe may result in partial failure, potentially leading to an inconsistent state. +If the problematic command is a CREATE operation, consider using the 'IF EXISTS' syntax to drop the object, +if applicable, and then re-attempt the original command. ERROR: could not create unique index "index_test_2_a_idx_1880019" DETAIL: Key (a)=(1) is duplicated. CONTEXT: while executing command on localhost:xxxxx diff --git a/src/test/regress/expected/multi_extension.out b/src/test/regress/expected/multi_extension.out index 295b10c76..43f9c3b98 100644 --- a/src/test/regress/expected/multi_extension.out +++ b/src/test/regress/expected/multi_extension.out @@ -1422,7 +1422,8 @@ ALTER EXTENSION citus UPDATE TO '12.2-1'; SELECT * FROM multi_extension.print_extension_changes(); previous_object | current_object --------------------------------------------------------------------- -(0 rows) + | function citus_internal_database_command(text) void +(1 row) DROP TABLE multi_extension.prev_objects, multi_extension.extension_diff; -- show running version diff --git a/src/test/regress/expected/multi_test_helpers.out b/src/test/regress/expected/multi_test_helpers.out index 4b621b968..70a541d2a 100644 --- a/src/test/regress/expected/multi_test_helpers.out +++ b/src/test/regress/expected/multi_test_helpers.out @@ -556,3 +556,73 @@ BEGIN ORDER BY node_type; END; $func$ LANGUAGE plpgsql; +-- For all nodes, returns database properties of given database, except +-- oid, datfrozenxid and datminmxid. +-- +-- Also returns whether the node has a pg_dist_object record for the database +-- and whether there are any stale pg_dist_object records for a database. +CREATE OR REPLACE FUNCTION check_database_on_all_nodes(p_database_name text) +RETURNS TABLE (node_type text, result text) +AS $func$ +DECLARE + pg_ge_15_options text := ''; + pg_ge_16_options text := ''; +BEGIN + IF EXISTS (SELECT 1 FROM pg_attribute WHERE attrelid = 'pg_database'::regclass AND attname = 'datlocprovider') THEN + pg_ge_15_options := ', daticulocale, datcollversion, datlocprovider'; + ELSE + pg_ge_15_options := $$, null as daticulocale, null as datcollversion, 'c' as datlocprovider$$; + END IF; + + IF EXISTS (SELECT 1 FROM pg_attribute WHERE attrelid = 'pg_database'::regclass AND attname = 'daticurules') THEN + pg_ge_16_options := ', daticurules'; + ELSE + pg_ge_16_options := ', null as daticurules'; + END IF; + + RETURN QUERY + SELECT + CASE WHEN (groupid = 0 AND groupid = (SELECT groupid FROM pg_dist_local_group)) THEN 'coordinator (local)' + WHEN (groupid = 0) THEN 'coordinator (remote)' + WHEN (groupid = (SELECT groupid FROM pg_dist_local_group)) THEN 'worker node (local)' + ELSE 'worker node (remote)' + END AS node_type, + q2.result + FROM run_command_on_all_nodes( + format( + $$ + SELECT to_jsonb(q.*) + FROM ( + SELECT + ( + SELECT to_jsonb(database_properties.*) + FROM ( + SELECT datname, pa.rolname as database_owner, + pg_encoding_to_char(pd.encoding) as encoding, + datistemplate, datallowconn, datconnlimit, datacl, + pt.spcname AS tablespace, datcollate, datctype + %2$s -- >= pg15 options + %3$s -- >= pg16 options + FROM pg_database pd + JOIN pg_authid pa ON pd.datdba = pa.oid + JOIN pg_tablespace pt ON pd.dattablespace = pt.oid + WHERE datname = '%1$s' + ) database_properties + ) AS database_properties, + ( + SELECT COUNT(*)=1 + FROM pg_dist_object WHERE objid = (SELECT oid FROM pg_database WHERE datname = '%1$s') + ) AS pg_dist_object_record_for_db_exists, + ( + SELECT COUNT(*) > 0 + FROM pg_dist_object + WHERE classid = 1262 AND objid NOT IN (SELECT oid FROM pg_database) + ) AS stale_pg_dist_object_record_for_a_db_exists + ) q + $$, + p_database_name, pg_ge_15_options, pg_ge_16_options + ) + ) q2 + JOIN pg_dist_node USING (nodeid); +END; +$func$ LANGUAGE plpgsql; \ No newline at end of file diff --git a/src/test/regress/expected/single_node.out b/src/test/regress/expected/single_node.out index f485763c5..522ffb8e8 100644 --- a/src/test/regress/expected/single_node.out +++ b/src/test/regress/expected/single_node.out @@ -88,8 +88,9 @@ SELECT create_distributed_table('failover_to_local', 'a', shard_count=>32); (1 row) CREATE INDEX CONCURRENTLY ON failover_to_local(a); -WARNING: CONCURRENTLY-enabled index commands can fail partially, leaving behind an INVALID index. - Use DROP INDEX CONCURRENTLY IF EXISTS to remove the invalid index. +WARNING: Commands that are not transaction-safe may result in partial failure, potentially leading to an inconsistent state. +If the problematic command is a CREATE operation, consider using the 'IF EXISTS' syntax to drop the object, +if applicable, and then re-attempt the original command. ERROR: the total number of connections on the server is more than max_connections(100) HINT: Consider using a higher value for max_connections -- reset global GUC changes diff --git a/src/test/regress/expected/single_node_0.out b/src/test/regress/expected/single_node_0.out index 321d283f8..12b385e96 100644 --- a/src/test/regress/expected/single_node_0.out +++ b/src/test/regress/expected/single_node_0.out @@ -88,8 +88,9 @@ SELECT create_distributed_table('failover_to_local', 'a', shard_count=>32); (1 row) CREATE INDEX CONCURRENTLY ON failover_to_local(a); -WARNING: CONCURRENTLY-enabled index commands can fail partially, leaving behind an INVALID index. - Use DROP INDEX CONCURRENTLY IF EXISTS to remove the invalid index. +WARNING: Commands that are not transaction-safe may result in partial failure, potentially leading to an inconsistent state. +If the problematic command is a CREATE operation, consider using the 'IF EXISTS' syntax to drop the object, +if applicable, and then re-attempt the original command. ERROR: the total number of connections on the server is more than max_connections(100) HINT: Consider using a higher value for max_connections -- reset global GUC changes diff --git a/src/test/regress/expected/upgrade_list_citus_objects.out b/src/test/regress/expected/upgrade_list_citus_objects.out index 36bd504e8..942e0336f 100644 --- a/src/test/regress/expected/upgrade_list_citus_objects.out +++ b/src/test/regress/expected/upgrade_list_citus_objects.out @@ -71,6 +71,7 @@ ORDER BY 1; function citus_internal_add_shard_metadata(regclass,bigint,"char",text,text) function citus_internal_add_tenant_schema(oid,integer) function citus_internal_adjust_local_clock_to_remote(cluster_clock) + function citus_internal_database_command(text) function citus_internal_delete_colocation_metadata(integer) function citus_internal_delete_partition_metadata(regclass) function citus_internal_delete_placement_metadata(bigint) @@ -343,5 +344,5 @@ ORDER BY 1; view citus_stat_tenants_local view pg_dist_shard_placement view time_partitions -(333 rows) +(334 rows) diff --git a/src/test/regress/multi_1_schedule b/src/test/regress/multi_1_schedule index aed751aa0..9528cc704 100644 --- a/src/test/regress/multi_1_schedule +++ b/src/test/regress/multi_1_schedule @@ -35,6 +35,9 @@ test: alter_database_owner test: seclabel test: distributed_triggers test: create_single_shard_table +test: create_drop_database_propagation +test: create_drop_database_propagation_pg15 +test: create_drop_database_propagation_pg16 # don't parallelize single_shard_table_udfs to make sure colocation ids are sequential test: single_shard_table_udfs test: schema_based_sharding diff --git a/src/test/regress/pg_regress_multi.pl b/src/test/regress/pg_regress_multi.pl index 3acde4c3c..95330c638 100755 --- a/src/test/regress/pg_regress_multi.pl +++ b/src/test/regress/pg_regress_multi.pl @@ -634,7 +634,7 @@ for my $port (@followerWorkerPorts) } } -for my $tablespace ("ts0", "ts1", "ts2") +for my $tablespace ("ts0", "ts1", "ts2", "ts3", "ts4", "ts5") { if (-e catfile($TMP_CHECKDIR, $tablespace)) { diff --git a/src/test/regress/sql/create_drop_database_propagation.sql b/src/test/regress/sql/create_drop_database_propagation.sql new file mode 100644 index 000000000..c83548d68 --- /dev/null +++ b/src/test/regress/sql/create_drop_database_propagation.sql @@ -0,0 +1,554 @@ + +-- Test for create/drop database propagation. +-- This test is only executes for Postgres versions < 15. +-- For versions >= 15, pg15_create_drop_database_propagation.sql is used. +-- For versions >= 16, pg16_create_drop_database_propagation.sql is used. + +-- Test the UDF that we use to issue database command during metadata sync. +SELECT pg_catalog.citus_internal_database_command(null); + +CREATE ROLE test_db_commands WITH LOGIN; +ALTER SYSTEM SET citus.enable_manual_metadata_changes_for_user TO 'test_db_commands'; +SELECT pg_reload_conf(); +SELECT pg_sleep(0.1); +SET ROLE test_db_commands; + +-- fails on null input +SELECT pg_catalog.citus_internal_database_command(null); + +-- fails on non create / drop db command +SELECT pg_catalog.citus_internal_database_command('CREATE TABLE foo_bar(a int)'); +SELECT pg_catalog.citus_internal_database_command('SELECT 1'); +SELECT pg_catalog.citus_internal_database_command('asfsfdsg'); +SELECT pg_catalog.citus_internal_database_command(''); + +RESET ROLE; +ALTER ROLE test_db_commands nocreatedb; +SET ROLE test_db_commands; + +-- make sure that pg_catalog.citus_internal_database_command doesn't cause privilege escalation +SELECT pg_catalog.citus_internal_database_command('CREATE DATABASE no_permissions'); + +RESET ROLE; +DROP USER test_db_commands; +ALTER SYSTEM RESET citus.enable_manual_metadata_changes_for_user; +SELECT pg_reload_conf(); +SELECT pg_sleep(0.1); + +\set create_drop_db_tablespace :abs_srcdir '/tmp_check/ts3' +CREATE TABLESPACE create_drop_db_tablespace LOCATION :'create_drop_db_tablespace'; + +\c - - - :worker_1_port +\set create_drop_db_tablespace :abs_srcdir '/tmp_check/ts4' +CREATE TABLESPACE create_drop_db_tablespace LOCATION :'create_drop_db_tablespace'; + +\c - - - :worker_2_port +\set create_drop_db_tablespace :abs_srcdir '/tmp_check/ts5' +CREATE TABLESPACE create_drop_db_tablespace LOCATION :'create_drop_db_tablespace'; + +\c - - - :master_port +CREATE DATABASE local_database; + +-- check that it's only created for coordinator +SELECT * FROM public.check_database_on_all_nodes('local_database') ORDER BY node_type; + +DROP DATABASE local_database; + +-- and is dropped +SELECT * FROM public.check_database_on_all_nodes('local_database') ORDER BY node_type; + +\c - - - :worker_1_port +CREATE DATABASE local_database; + +-- check that it's only created for coordinator +SELECT * FROM public.check_database_on_all_nodes('local_database') ORDER BY node_type; + +DROP DATABASE local_database; + +-- and is dropped +SELECT * FROM public.check_database_on_all_nodes('local_database') ORDER BY node_type; + +\c - - - :master_port +create user create_drop_db_test_user; + +set citus.enable_create_database_propagation=on; + +-- Tests for create database propagation with template0 which should fail +CREATE DATABASE mydatabase + WITH OWNER = create_drop_db_test_user + TEMPLATE = 'template0' + ENCODING = 'UTF8' + CONNECTION LIMIT = 10 + TABLESPACE = create_drop_db_tablespace + ALLOW_CONNECTIONS = true + IS_TEMPLATE = false; + +CREATE DATABASE mydatabase_1 + WITH template=template1 + OWNER = create_drop_db_test_user + ENCODING = 'UTF8' + CONNECTION LIMIT = 10 + TABLESPACE = create_drop_db_tablespace + ALLOW_CONNECTIONS = true + IS_TEMPLATE = false; + +SELECT * FROM public.check_database_on_all_nodes('mydatabase_1') ORDER BY node_type; + +-- Test LC / LOCALE settings that don't match the ones provided in template db. +-- All should throw an error on the coordinator. +CREATE DATABASE lc_collate_test LC_COLLATE = 'C.UTF-8'; +CREATE DATABASE lc_ctype_test LC_CTYPE = 'C.UTF-8'; +CREATE DATABASE locale_test LOCALE = 'C.UTF-8'; +CREATE DATABASE lc_collate_lc_ctype_test LC_COLLATE = 'C.UTF-8' LC_CTYPE = 'C.UTF-8'; + +-- Test LC / LOCALE settings that match the ones provided in template db. +CREATE DATABASE lc_collate_test LC_COLLATE = 'C'; +CREATE DATABASE lc_ctype_test LC_CTYPE = 'C'; +CREATE DATABASE locale_test LOCALE = 'C'; +CREATE DATABASE lc_collate_lc_ctype_test LC_COLLATE = 'C' LC_CTYPE = 'C'; + +SELECT * FROM public.check_database_on_all_nodes('lc_collate_test') ORDER BY node_type; +SELECT * FROM public.check_database_on_all_nodes('lc_ctype_test') ORDER BY node_type; +SELECT * FROM public.check_database_on_all_nodes('locale_test') ORDER BY node_type; +SELECT * FROM public.check_database_on_all_nodes('lc_collate_lc_ctype_test') ORDER BY node_type; + +DROP DATABASE lc_collate_test; +DROP DATABASE lc_ctype_test; +DROP DATABASE locale_test; +DROP DATABASE lc_collate_lc_ctype_test; + +-- ALTER TABLESPACE .. RENAME TO .. is not supported, so we need to rename it manually. +SELECT result FROM run_command_on_all_nodes( + $$ + ALTER TABLESPACE create_drop_db_tablespace RENAME TO "ts-needs\!escape" + $$ +); + +CREATE USER "role-needs\!escape"; + +CREATE DATABASE "db-needs\!escape" owner "role-needs\!escape" tablespace "ts-needs\!escape"; + +-- Rename it to make check_database_on_all_nodes happy. +-- Today we don't support ALTER DATABASE .. RENAME TO .., so need to propagate it manually. +SELECT result FROM run_command_on_all_nodes( + $$ + ALTER DATABASE "db-needs\!escape" RENAME TO db_needs_escape + $$ +); + +SELECT * FROM public.check_database_on_all_nodes('db_needs_escape') ORDER BY node_type; + +-- test database syncing after node addition + +select 1 from citus_remove_node('localhost', :worker_2_port); + +--test with is_template true and allow connections false +CREATE DATABASE mydatabase + OWNER = create_drop_db_test_user + CONNECTION LIMIT = 10 + ENCODING = 'UTF8' + TABLESPACE = "ts-needs\!escape" + ALLOW_CONNECTIONS = false + IS_TEMPLATE = false; + +SELECT * FROM public.check_database_on_all_nodes('mydatabase') ORDER BY node_type; + +SET citus.metadata_sync_mode to 'transactional'; +select 1 from citus_add_node('localhost', :worker_2_port); + +SELECT * FROM public.check_database_on_all_nodes('mydatabase') ORDER BY node_type; +SELECT * FROM public.check_database_on_all_nodes('mydatabase_1') ORDER BY node_type; +SELECT * FROM public.check_database_on_all_nodes('db_needs_escape') ORDER BY node_type; + +select 1 from citus_remove_node('localhost', :worker_2_port); + +SET citus.metadata_sync_mode to 'nontransactional'; +select 1 from citus_add_node('localhost', :worker_2_port); + +RESET citus.metadata_sync_mode; + +SELECT * FROM public.check_database_on_all_nodes('mydatabase') ORDER BY node_type; +SELECT * FROM public.check_database_on_all_nodes('mydatabase_1') ORDER BY node_type; +SELECT * FROM public.check_database_on_all_nodes('db_needs_escape') ORDER BY node_type; + +SELECT citus_disable_node_and_wait('localhost', :worker_1_port, true); + +CREATE DATABASE test_node_activation; +SELECT 1 FROM citus_activate_node('localhost', :worker_1_port); + +SELECT * FROM public.check_database_on_all_nodes('mydatabase') ORDER BY node_type; +SELECT * FROM public.check_database_on_all_nodes('mydatabase_1') ORDER BY node_type; +SELECT * FROM public.check_database_on_all_nodes('db_needs_escape') ORDER BY node_type; +SELECT * FROM public.check_database_on_all_nodes('test_node_activation') ORDER BY node_type; + +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database mydatabase; + +SET citus.log_remote_commands = false; + +-- check that we actually drop the database +drop database mydatabase_1; + +SELECT * FROM public.check_database_on_all_nodes('mydatabase_1') ORDER BY node_type; + +SELECT * FROM public.check_database_on_all_nodes('mydatabase') ORDER BY node_type; + +-- create a template database with all options set and allow connections false +CREATE DATABASE my_template_database + WITH OWNER = create_drop_db_test_user + ENCODING = 'UTF8' + TABLESPACE = "ts-needs\!escape" + ALLOW_CONNECTIONS = false + IS_TEMPLATE = true; + +SELECT * FROM public.check_database_on_all_nodes('my_template_database') ORDER BY node_type; + +--template databases could not be dropped so we need to change the template flag +SELECT result from run_command_on_all_nodes( + $$ + UPDATE pg_database SET datistemplate = false WHERE datname = 'my_template_database' + $$ +) ORDER BY result; + +SET citus.log_remote_commands = true; + +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database my_template_database; + +SET citus.log_remote_commands = false; + +SELECT * FROM public.check_database_on_all_nodes('my_template_database') ORDER BY node_type; + +--tests for special characters in database name +set citus.enable_create_database_propagation=on; +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%CREATE DATABASE%'; + +create database "mydatabase#1'2"; + +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database if exists "mydatabase#1'2"; + +reset citus.grep_remote_commands; +reset citus.log_remote_commands; + +-- it doesn't fail thanks to "if exists" +drop database if exists "mydatabase#1'2"; + +-- recreate it to verify that it's actually dropped +create database "mydatabase#1'2"; +drop database "mydatabase#1'2"; + +-- second time we try to drop it, it fails due to lack of "if exists" +drop database "mydatabase#1'2"; + +\c - - - :worker_1_port + +SET citus.enable_create_database_propagation TO ON; + +-- show that dropping the database from workers is not allowed when citus.enable_create_database_propagation is on +DROP DATABASE db_needs_escape; + +-- and the same applies to create database too +create database error_test; + +\c - - - :master_port + +SET citus.enable_create_database_propagation TO ON; + +DROP DATABASE test_node_activation; +DROP DATABASE db_needs_escape; +DROP USER "role-needs\!escape"; + +-- drop database with force options test + +create database db_force_test; + +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%DROP DATABASE%'; + +drop database db_force_test with (force); + +reset citus.log_remote_commands; +reset citus.grep_remote_commands; + +SELECT * FROM public.check_database_on_all_nodes('db_force_test') ORDER BY node_type; + +-- test that we won't propagate non-distributed databases in citus_add_node + +select 1 from citus_remove_node('localhost', :worker_2_port); +SET citus.enable_create_database_propagation TO off; +CREATE DATABASE non_distributed_db; +SET citus.enable_create_database_propagation TO on; +create database distributed_db; + +select 1 from citus_add_node('localhost', :worker_2_port); + +--non_distributed_db should not be propagated to worker_2 +SELECT * FROM public.check_database_on_all_nodes('non_distributed_db') ORDER BY node_type; +--distributed_db should be propagated to worker_2 +SELECT * FROM public.check_database_on_all_nodes('distributed_db') ORDER BY node_type; + +--clean up resources created by this test +drop database distributed_db; + +set citus.enable_create_database_propagation TO off; +drop database non_distributed_db; + +-- test role grants on DATABASE in metadata sync + +SELECT result from run_command_on_all_nodes( + $$ + create database db_role_grants_test_non_distributed + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + revoke connect,temp,temporary,create on database db_role_grants_test_non_distributed from public + $$ +) ORDER BY result; + +SET citus.enable_create_database_propagation TO on; + +CREATE ROLE db_role_grants_test_role_exists_on_node_2; + +select 1 from citus_remove_node('localhost', :worker_2_port); + +CREATE DATABASE db_role_grants_test; + +revoke connect,temp,temporary,create on database db_role_grants_test from public; + +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%CREATE ROLE%'; +CREATE ROLE db_role_grants_test_role_missing_on_node_2; + +RESET citus.log_remote_commands ; +RESET citus.grep_remote_commands; + +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%GRANT%'; +grant CONNECT,TEMPORARY,CREATE on DATABASE db_role_grants_test to db_role_grants_test_role_exists_on_node_2; +grant CONNECT,TEMPORARY,CREATE on DATABASE db_role_grants_test to db_role_grants_test_role_missing_on_node_2; + +grant CONNECT,TEMPORARY,CREATE on DATABASE db_role_grants_test_non_distributed to db_role_grants_test_role_exists_on_node_2; +grant CONNECT,TEMPORARY,CREATE on DATABASE db_role_grants_test_non_distributed to db_role_grants_test_role_missing_on_node_2; + +-- check the privileges before add_node for database db_role_grants_test, +-- role db_role_grants_test_role_exists_on_node_2 + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test', 'CREATE') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test', 'TEMPORARY') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test', 'CONNECT') + $$ +) ORDER BY result; + +-- check the privileges before add_node for database db_role_grants_test, +-- role db_role_grants_test_role_missing_on_node_2 + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test', 'CREATE') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test', 'TEMPORARY') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test', 'CONNECT') + $$ +) ORDER BY result; + +-- check the privileges before add_node for database db_role_grants_test_non_distributed, +-- role db_role_grants_test_role_exists_on_node_2 +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test_non_distributed', 'CREATE') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test_non_distributed', 'TEMPORARY') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test_non_distributed', 'CONNECT') + $$ +) ORDER BY result; + +-- check the privileges before add_node for database db_role_grants_test_non_distributed, +-- role db_role_grants_test_role_missing_on_node_2 + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test_non_distributed', 'CREATE') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test_non_distributed', 'TEMPORARY') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test_non_distributed', 'CONNECT') + $$ +) ORDER BY result; + +RESET citus.log_remote_commands; +RESET citus.grep_remote_commands; + +select 1 from citus_add_node('localhost', :worker_2_port); + +-- check the privileges after add_node for database db_role_grants_test, +-- role db_role_grants_test_role_exists_on_node_2 + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test', 'CREATE') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test', 'TEMPORARY') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test', 'CONNECT') + $$ +) ORDER BY result; + +-- check the privileges after add_node for database db_role_grants_test, +-- role db_role_grants_test_role_missing_on_node_2 + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test', 'CREATE') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test', 'TEMPORARY') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test', 'CONNECT') + $$ +) ORDER BY result; + +-- check the privileges after add_node for database db_role_grants_test_non_distributed, +-- role db_role_grants_test_role_exists_on_node_2 +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test_non_distributed', 'CREATE') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test_non_distributed', 'TEMPORARY') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_exists_on_node_2','db_role_grants_test_non_distributed', 'CONNECT') + $$ +) ORDER BY result; + +-- check the privileges after add_node for database db_role_grants_test_non_distributed, +-- role db_role_grants_test_role_missing_on_node_2 + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test_non_distributed', 'CREATE') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test_non_distributed', 'TEMPORARY') + $$ +) ORDER BY result; + +SELECT result from run_command_on_all_nodes( + $$ + select has_database_privilege('db_role_grants_test_role_missing_on_node_2','db_role_grants_test_non_distributed', 'CONNECT') + $$ +) ORDER BY result; + +grant connect,temp,temporary,create on database db_role_grants_test to public; + +DROP DATABASE db_role_grants_test; + +SELECT result from run_command_on_all_nodes( + $$ + drop database db_role_grants_test_non_distributed + $$ +) ORDER BY result; +DROP ROLE db_role_grants_test_role_exists_on_node_2; +DROP ROLE db_role_grants_test_role_missing_on_node_2; + +select 1 from citus_remove_node('localhost', :worker_2_port); + +set citus.enable_create_role_propagation TO off; +create role non_propagated_role; +set citus.enable_create_role_propagation TO on; + +set citus.enable_create_database_propagation TO on; + +-- Make sure that we propagate non_propagated_role because it's a dependency of test_db. +-- And hence it becomes a distributed object. +create database test_db OWNER non_propagated_role; + +create role propagated_role; +grant connect on database test_db to propagated_role; + +SELECT 1 FROM citus_add_node('localhost', :worker_2_port); + +SELECT * FROM public.check_database_on_all_nodes('test_db') ORDER BY node_type; + +REVOKE CONNECT ON DATABASE test_db FROM propagated_role; +DROP DATABASE test_db; +DROP ROLE propagated_role, non_propagated_role; + +--clean up resources created by this test + +-- DROP TABLESPACE is not supported, so we need to drop it manually. +SELECT result FROM run_command_on_all_nodes( + $$ + drop tablespace "ts-needs\!escape" + $$ +); + +drop user create_drop_db_test_user; +reset citus.enable_create_database_propagation; diff --git a/src/test/regress/sql/create_drop_database_propagation_pg15.sql b/src/test/regress/sql/create_drop_database_propagation_pg15.sql new file mode 100644 index 000000000..40d1b9e09 --- /dev/null +++ b/src/test/regress/sql/create_drop_database_propagation_pg15.sql @@ -0,0 +1,65 @@ +-- +-- PG15 +-- +SHOW server_version \gset +SELECT substring(:'server_version', '\d+')::int >= 15 AS server_version_ge_15 +\gset +\if :server_version_ge_15 +\else +\q +\endif + +-- create/drop database for pg >= 15 + +set citus.enable_create_database_propagation=on; + +CREATE DATABASE mydatabase + WITH OID = 966345; + +CREATE DATABASE mydatabase + WITH strategy file_copy; + +CREATE DATABASE st_wal_log + WITH strategy WaL_LoG; + +SELECT * FROM public.check_database_on_all_nodes('st_wal_log') ORDER BY node_type; + +drop database st_wal_log; + +select 1 from citus_remove_node('localhost', :worker_2_port); + +-- test COLLATION_VERSION + +CREATE DATABASE test_collation_version + WITH ENCODING = 'UTF8' + COLLATION_VERSION = '1.0' + ALLOW_CONNECTIONS = false; + +select 1 from citus_add_node('localhost', :worker_2_port); + +SELECT * FROM public.check_database_on_all_nodes('test_collation_version') ORDER BY node_type; + +drop database test_collation_version; + +SET client_min_messages TO WARNING; +-- test LOCALE_PROVIDER & ICU_LOCALE +CREATE DATABASE test_locale_provider + WITH ENCODING = 'UTF8' + LOCALE_PROVIDER = 'icu' + ICU_LOCALE = 'en_US'; +RESET client_min_messages; + +CREATE DATABASE test_locale_provider + WITH ENCODING = 'UTF8' + LOCALE_PROVIDER = 'libc' + ICU_LOCALE = 'en_US'; + +CREATE DATABASE test_locale_provider + WITH ENCODING = 'UTF8' + LOCALE_PROVIDER = 'libc'; + +SELECT * FROM public.check_database_on_all_nodes('test_locale_provider') ORDER BY node_type; + +drop database test_locale_provider; + +\c - - - :master_port diff --git a/src/test/regress/sql/create_drop_database_propagation_pg16.sql b/src/test/regress/sql/create_drop_database_propagation_pg16.sql new file mode 100644 index 000000000..cec553813 --- /dev/null +++ b/src/test/regress/sql/create_drop_database_propagation_pg16.sql @@ -0,0 +1,22 @@ +-- +-- PG16 +-- +SHOW server_version \gset +SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16 +\gset +\if :server_version_ge_16 +\else +\q +\endif + +-- create/drop database for pg >= 16 + +set citus.enable_create_database_propagation=on; + +-- test icu_rules +-- +-- practically we don't support it but better to test + +CREATE DATABASE citus_icu_rules_test WITH icu_rules='de_DE@collation=phonebook'; +CREATE DATABASE citus_icu_rules_test WITH icu_rules='de_DE@collation=phonebook' locale_provider='icu'; +CREATE DATABASE citus_icu_rules_test WITH icu_rules='de_DE@collation=phonebook' locale_provider='icu' icu_locale = 'de_DE'; diff --git a/src/test/regress/sql/multi_test_helpers.sql b/src/test/regress/sql/multi_test_helpers.sql index 7f0346d14..e67b782a5 100644 --- a/src/test/regress/sql/multi_test_helpers.sql +++ b/src/test/regress/sql/multi_test_helpers.sql @@ -581,3 +581,74 @@ BEGIN ORDER BY node_type; END; $func$ LANGUAGE plpgsql; + +-- For all nodes, returns database properties of given database, except +-- oid, datfrozenxid and datminmxid. +-- +-- Also returns whether the node has a pg_dist_object record for the database +-- and whether there are any stale pg_dist_object records for a database. +CREATE OR REPLACE FUNCTION check_database_on_all_nodes(p_database_name text) +RETURNS TABLE (node_type text, result text) +AS $func$ +DECLARE + pg_ge_15_options text := ''; + pg_ge_16_options text := ''; +BEGIN + IF EXISTS (SELECT 1 FROM pg_attribute WHERE attrelid = 'pg_database'::regclass AND attname = 'datlocprovider') THEN + pg_ge_15_options := ', daticulocale, datcollversion, datlocprovider'; + ELSE + pg_ge_15_options := $$, null as daticulocale, null as datcollversion, 'c' as datlocprovider$$; + END IF; + + IF EXISTS (SELECT 1 FROM pg_attribute WHERE attrelid = 'pg_database'::regclass AND attname = 'daticurules') THEN + pg_ge_16_options := ', daticurules'; + ELSE + pg_ge_16_options := ', null as daticurules'; + END IF; + + RETURN QUERY + SELECT + CASE WHEN (groupid = 0 AND groupid = (SELECT groupid FROM pg_dist_local_group)) THEN 'coordinator (local)' + WHEN (groupid = 0) THEN 'coordinator (remote)' + WHEN (groupid = (SELECT groupid FROM pg_dist_local_group)) THEN 'worker node (local)' + ELSE 'worker node (remote)' + END AS node_type, + q2.result + FROM run_command_on_all_nodes( + format( + $$ + SELECT to_jsonb(q.*) + FROM ( + SELECT + ( + SELECT to_jsonb(database_properties.*) + FROM ( + SELECT datname, pa.rolname as database_owner, + pg_encoding_to_char(pd.encoding) as encoding, + datistemplate, datallowconn, datconnlimit, datacl, + pt.spcname AS tablespace, datcollate, datctype + %2$s -- >= pg15 options + %3$s -- >= pg16 options + FROM pg_database pd + JOIN pg_authid pa ON pd.datdba = pa.oid + JOIN pg_tablespace pt ON pd.dattablespace = pt.oid + WHERE datname = '%1$s' + ) database_properties + ) AS database_properties, + ( + SELECT COUNT(*)=1 + FROM pg_dist_object WHERE objid = (SELECT oid FROM pg_database WHERE datname = '%1$s') + ) AS pg_dist_object_record_for_db_exists, + ( + SELECT COUNT(*) > 0 + FROM pg_dist_object + WHERE classid = 1262 AND objid NOT IN (SELECT oid FROM pg_database) + ) AS stale_pg_dist_object_record_for_a_db_exists + ) q + $$, + p_database_name, pg_ge_15_options, pg_ge_16_options + ) + ) q2 + JOIN pg_dist_node USING (nodeid); +END; +$func$ LANGUAGE plpgsql; From 0620c8f9a6f37bacf9f2e709ccca3c27f6dfbaad Mon Sep 17 00:00:00 2001 From: Nils Dijk Date: Thu, 23 Nov 2023 18:19:54 +0100 Subject: [PATCH 2/5] Sort includes (#7326) This change adds a script to programatically group all includes in a specific order. The script was used as a one time invocation to group and sort all includes throught our formatted code. The grouping is as follows: - System includes (eg. `#include<...>`) - Postgres.h (eg. `#include "postgres.h"`) - Toplevel imports from postgres, not contained in a directory (eg. `#include "miscadmin.h"`) - General postgres includes (eg . `#include "nodes/..."`) - Toplevel citus includes, not contained in a directory (eg. `#include "citus_verion.h"`) - Columnar includes (eg. `#include "columnar/..."`) - Distributed includes (eg. `#include "distributed/..."`) Because it is quite hard to understand the difference between toplevel citus includes and toplevel postgres includes it hardcodes the list of toplevel citus includes. In the same manner it assumes anything not prefixed with `columnar/` or `distributed/` as a postgres include. The sorting/grouping is enforced by CI. Since we do so with our own script there are not changes required in our uncrustify configuration. --- .github/workflows/build_and_test.yml | 2 + ci/README.md | 15 ++ ci/fix_style.sh | 1 + ci/include_grouping.py | 157 ++++++++++++++++++ ci/sort_and_group_includes.sh | 12 ++ src/backend/columnar/columnar.c | 6 +- src/backend/columnar/columnar_compression.c | 5 +- src/backend/columnar/columnar_customscan.c | 8 +- src/backend/columnar/columnar_debug.c | 6 +- src/backend/columnar/columnar_metadata.c | 37 +++-- src/backend/columnar/columnar_reader.c | 7 +- src/backend/columnar/columnar_storage.c | 2 +- src/backend/columnar/columnar_tableam.c | 23 +-- src/backend/columnar/columnar_writer.c | 15 +- src/backend/columnar/write_state_management.c | 20 +-- src/backend/distributed/cdc/cdc_decoder.c | 3 +- .../distributed/cdc/cdc_decoder_utils.c | 11 +- .../distributed/cdc/cdc_decoder_utils.h | 6 +- src/backend/distributed/clock/causal_clock.c | 29 ++-- .../distributed/commands/alter_table.c | 16 +- src/backend/distributed/commands/begin.c | 4 +- src/backend/distributed/commands/call.c | 29 ++-- ..._table_operation_for_connected_relations.c | 16 +- .../citus_add_local_table_to_metadata.c | 20 ++- .../commands/citus_global_signal.c | 6 +- src/backend/distributed/commands/cluster.c | 6 +- src/backend/distributed/commands/collation.c | 34 ++-- src/backend/distributed/commands/common.c | 2 +- .../commands/create_distributed_table.c | 81 ++++----- src/backend/distributed/commands/database.c | 1 + .../distributed/commands/dependencies.c | 8 +- .../commands/distribute_object_ops.c | 7 +- .../commands/drop_distributed_table.c | 9 +- src/backend/distributed/commands/extension.c | 23 +-- .../distributed/commands/foreign_constraint.c | 29 ++-- .../commands/foreign_data_wrapper.c | 13 +- .../distributed/commands/foreign_server.c | 14 +- src/backend/distributed/commands/function.c | 58 +++---- src/backend/distributed/commands/grant.c | 7 +- src/backend/distributed/commands/index.c | 52 +++--- .../distributed/commands/local_multi_copy.c | 25 +-- src/backend/distributed/commands/multi_copy.c | 82 ++++----- src/backend/distributed/commands/owned.c | 37 +++-- src/backend/distributed/commands/policy.c | 16 +- .../distributed/commands/publication.c | 18 +- src/backend/distributed/commands/rename.c | 5 +- src/backend/distributed/commands/role.c | 44 ++--- src/backend/distributed/commands/schema.c | 34 ++-- .../commands/schema_based_sharding.c | 12 +- src/backend/distributed/commands/seclabel.c | 2 +- src/backend/distributed/commands/sequence.c | 11 +- src/backend/distributed/commands/statistics.c | 20 ++- .../distributed/commands/subscription.c | 20 ++- src/backend/distributed/commands/table.c | 49 +++--- .../distributed/commands/text_search.c | 3 +- src/backend/distributed/commands/trigger.c | 14 +- src/backend/distributed/commands/truncate.c | 14 +- src/backend/distributed/commands/type.c | 26 +-- .../distributed/commands/utility_hook.c | 38 +++-- src/backend/distributed/commands/vacuum.c | 15 +- .../distributed/commands/variableset.c | 16 +- src/backend/distributed/commands/view.c | 26 +-- .../connection/connection_configuration.c | 8 +- .../connection/connection_management.c | 28 ++-- .../locally_reserved_shared_connections.c | 9 +- .../connection/placement_connection.c | 13 +- .../distributed/connection/remote_commands.c | 18 +- .../connection/shared_connection_stats.c | 16 +- .../connection/worker_log_messages.c | 3 +- .../distributed/deparser/citus_deparseutils.c | 7 +- .../distributed/deparser/citus_grantutils.c | 4 +- .../distributed/deparser/citus_ruleutils.c | 38 +++-- .../distributed/deparser/citus_setutils.c | 18 +- .../deparser/deparse_collation_stmts.c | 2 +- .../deparser/deparse_database_stmts.c | 6 +- .../deparser/deparse_extension_stmts.c | 5 +- .../deparse_foreign_data_wrapper_stmts.c | 7 +- .../deparser/deparse_foreign_server_stmts.c | 7 +- .../deparser/deparse_function_stmts.c | 11 +- .../deparser/deparse_owned_stmts.c | 7 +- .../deparser/deparse_publication_stmts.c | 11 +- .../distributed/deparser/deparse_role_stmts.c | 11 +- .../deparser/deparse_schema_stmts.c | 7 +- .../deparser/deparse_seclabel_stmts.c | 3 +- .../deparser/deparse_sequence_stmts.c | 5 +- .../deparser/deparse_statistics_stmts.c | 9 +- .../deparser/deparse_table_stmts.c | 10 +- .../distributed/deparser/deparse_view_stmts.c | 9 +- .../distributed/deparser/objectaddress.c | 7 +- .../deparser/qualify_aggregate_stmts.c | 3 +- .../deparser/qualify_function_stmt.c | 5 +- .../deparser/qualify_publication_stmt.c | 5 +- .../distributed/deparser/qualify_role_stmt.c | 3 +- .../deparser/qualify_sequence_stmt.c | 5 +- .../deparser/qualify_statistics_stmt.c | 9 +- .../distributed/deparser/qualify_table_stmt.c | 1 + .../distributed/deparser/qualify_type_stmt.c | 9 +- .../distributed/deparser/qualify_view_stmt.c | 5 +- .../distributed/executor/adaptive_executor.c | 39 ++--- .../distributed/executor/citus_custom_scan.c | 27 +-- .../directed_acyclic_graph_execution.c | 3 +- .../executor/distributed_execution_locks.c | 2 +- .../distributed_intermediate_results.c | 16 +- .../executor/executor_util_params.c | 4 +- .../executor/executor_util_tasks.c | 1 + .../executor/executor_util_tuples.c | 4 +- .../executor/insert_select_executor.c | 53 +++--- .../executor/intermediate_results.c | 34 ++-- .../distributed/executor/local_executor.c | 20 ++- .../distributed/executor/merge_executor.c | 9 +- .../distributed/executor/multi_executor.c | 44 ++--- .../executor/multi_server_executor.c | 14 +- .../partitioned_intermediate_results.c | 14 +- .../distributed/executor/placement_access.c | 2 +- .../distributed/executor/query_stats.c | 26 +-- .../executor/repartition_executor.c | 1 + .../executor/repartition_join_execution.c | 8 +- .../distributed/executor/subplan_execution.c | 5 +- src/backend/distributed/executor/transmit.c | 18 +- .../distributed/executor/tuple_destination.c | 8 +- src/backend/distributed/metadata/dependency.c | 15 +- src/backend/distributed/metadata/distobject.c | 29 ++-- .../distributed/metadata/metadata_cache.c | 82 ++++----- .../distributed/metadata/metadata_sync.c | 84 +++++----- .../distributed/metadata/metadata_utility.c | 77 ++++----- .../distributed/metadata/node_metadata.c | 39 ++--- .../metadata/pg_get_object_address_13_14_15.c | 19 ++- .../operations/citus_create_restore_point.c | 12 +- .../citus_split_shard_by_split_points.c | 12 +- .../distributed/operations/citus_tools.c | 12 +- .../distributed/operations/create_shards.c | 42 ++--- .../distributed/operations/delete_protocol.c | 49 +++--- .../distributed/operations/health_check.c | 3 +- .../distributed/operations/isolate_shards.c | 24 +-- .../operations/modify_multiple_shards.c | 48 +++--- .../distributed/operations/node_protocol.c | 33 ++-- .../distributed/operations/partitioning.c | 6 +- .../replicate_none_dist_table_shard.c | 2 + .../distributed/operations/shard_cleaner.c | 12 +- .../distributed/operations/shard_rebalancer.c | 56 ++++--- .../distributed/operations/shard_split.c | 48 +++--- .../distributed/operations/shard_transfer.c | 37 +++-- .../distributed/operations/stage_protocol.c | 30 ++-- .../worker_copy_table_to_node_udf.c | 1 + .../operations/worker_node_manager.c | 16 +- .../operations/worker_shard_copy.c | 19 ++- .../operations/worker_split_copy_udf.c | 9 +- .../worker_split_shard_release_dsm_udf.c | 1 + ...worker_split_shard_replication_setup_udf.c | 31 ++-- .../planner/combine_query_planner.c | 17 +- src/backend/distributed/planner/cte_inline.c | 8 +- .../distributed/planner/deparse_shard_query.c | 24 +-- .../distributed/planner/distributed_planner.c | 90 +++++----- .../planner/extended_op_node_utils.c | 10 +- .../planner/fast_path_router_planner.c | 21 +-- .../planner/function_call_delegation.c | 48 +++--- .../planner/insert_select_planner.c | 43 ++--- .../planner/intermediate_result_pruning.c | 6 +- .../planner/local_distributed_join_planner.c | 66 ++++---- .../distributed/planner/local_plan_cache.c | 11 +- .../distributed/planner/merge_planner.c | 8 +- .../distributed/planner/multi_explain.c | 64 +++---- .../distributed/planner/multi_join_order.c | 30 ++-- .../planner/multi_logical_optimizer.c | 39 ++--- .../planner/multi_logical_planner.c | 39 ++--- .../planner/multi_physical_planner.c | 67 ++++---- .../planner/multi_router_planner.c | 84 +++++----- .../planner/query_colocation_checker.c | 24 +-- .../planner/query_pushdown_planning.c | 15 +- .../distributed/planner/recursive_planning.c | 61 ++++--- .../relation_restriction_equivalence.c | 24 +-- .../distributed/planner/shard_pruning.c | 30 ++-- .../distributed/planner/tdigest_extension.c | 7 +- .../distributed/progress/multi_progress.c | 6 +- .../distributed/relay/relay_event_utility.c | 28 ++-- .../replication/multi_logical_replication.c | 66 ++++---- .../shardsplit/shardsplit_decoder.c | 18 +- .../shardsplit_logical_replication.c | 19 ++- .../shardsplit/shardsplit_shared_memory.c | 12 +- src/backend/distributed/shared_library_init.c | 149 +++++++++-------- .../distributed/test/backend_counter.c | 1 + .../distributed/test/citus_depended_object.c | 9 +- .../distributed/test/citus_stat_tenants.c | 4 +- .../distributed/test/colocation_utils.c | 2 + src/backend/distributed/test/create_shards.c | 8 +- .../distributed/test/deparse_function_query.c | 3 +- .../distributed/test/deparse_shard_query.c | 16 +- src/backend/distributed/test/dependency.c | 1 + .../test/distributed_deadlock_detection.c | 8 +- .../test/distributed_intermediate_results.c | 5 +- .../distributed/test/distribution_metadata.c | 34 ++-- src/backend/distributed/test/fake_am.c | 9 +- src/backend/distributed/test/fake_fdw.c | 10 +- .../test/foreign_key_relationship_query.c | 6 +- src/backend/distributed/test/global_pid.c | 1 + src/backend/distributed/test/hide_shards.c | 1 + .../distributed/test/intermediate_results.c | 1 + .../test/make_external_connection.c | 15 +- src/backend/distributed/test/metadata_sync.c | 12 +- .../distributed/test/partitioning_utils.c | 8 +- src/backend/distributed/test/progress_utils.c | 10 +- .../distributed/test/prune_shard_list.c | 25 +-- .../test/relation_access_tracking.c | 1 + .../test/run_from_same_connection.c | 15 +- .../distributed/test/sequential_execution.c | 1 + .../distributed/test/shard_rebalancer.c | 25 +-- .../test/shared_connection_counters.c | 10 +- src/backend/distributed/test/xact_stats.c | 1 + .../distributed/transaction/backend_data.c | 32 ++-- .../transaction/citus_dist_stat_activity.c | 3 +- .../distributed_deadlock_detection.c | 8 +- .../distributed/transaction/lock_graph.c | 9 +- .../transaction/relation_access_tracking.c | 13 +- .../transaction/remote_transaction.c | 6 +- .../transaction/transaction_management.c | 28 ++-- .../transaction/transaction_recovery.c | 31 ++-- .../transaction/worker_transaction.c | 20 ++- src/backend/distributed/utils/acquire_lock.c | 4 +- .../distributed/utils/aggregate_utils.c | 10 +- src/backend/distributed/utils/array_type.c | 7 +- .../distributed/utils/background_jobs.c | 6 +- src/backend/distributed/utils/cancel_utils.c | 2 + src/backend/distributed/utils/citus_clauses.c | 12 +- .../distributed/utils/citus_copyfuncs.c | 4 +- .../distributed/utils/citus_depended_object.c | 20 ++- .../distributed/utils/citus_nodefuncs.c | 7 +- .../distributed/utils/citus_safe_lib.c | 9 +- .../distributed/utils/citus_stat_tenants.c | 26 +-- src/backend/distributed/utils/citus_version.c | 3 +- .../distributed/utils/colocation_utils.c | 18 +- src/backend/distributed/utils/directory.c | 1 + .../distributed/utils/distribution_column.c | 12 +- .../utils/distribution_column_map.c | 3 +- src/backend/distributed/utils/enable_ssl.c | 12 +- src/backend/distributed/utils/errormessage.c | 5 +- .../utils/foreign_key_relationship.c | 20 +-- src/backend/distributed/utils/function.c | 4 +- .../distributed/utils/function_utils.c | 5 +- src/backend/distributed/utils/hash_helpers.c | 3 +- src/backend/distributed/utils/jsonbutils.c | 12 +- src/backend/distributed/utils/listutils.c | 8 +- src/backend/distributed/utils/log_utils.c | 13 +- src/backend/distributed/utils/maintenanced.c | 46 ++--- .../utils/multi_partitioning_utils.c | 28 ++-- .../distributed/utils/namespace_utils.c | 3 +- src/backend/distributed/utils/param_utils.c | 13 +- src/backend/distributed/utils/priority.c | 6 +- src/backend/distributed/utils/query_utils.c | 7 +- .../distributed/utils/reference_table_utils.c | 20 ++- .../utils/replication_origin_session_utils.c | 11 +- src/backend/distributed/utils/resource_lock.c | 46 ++--- src/backend/distributed/utils/role.c | 6 +- src/backend/distributed/utils/shard_utils.c | 2 + .../distributed/utils/shardinterval_utils.c | 12 +- .../distributed/utils/statistics_collection.c | 17 +- .../distributed/utils/task_execution_utils.c | 25 +-- .../utils/tenant_schema_metadata.c | 7 +- src/backend/distributed/utils/tuplestore.c | 3 +- src/backend/distributed/utils/type_utils.c | 3 +- .../worker/task_tracker_protocol.c | 1 + .../worker/worker_create_or_replace.c | 7 +- .../worker/worker_data_fetch_protocol.c | 30 ++-- .../distributed/worker/worker_drop_protocol.c | 21 +-- .../worker/worker_partition_protocol.c | 1 + .../worker/worker_shard_visibility.c | 18 +- .../worker/worker_sql_task_protocol.c | 11 +- .../worker/worker_truncate_trigger_protocol.c | 10 +- src/include/columnar/columnar.h | 15 +- src/include/columnar/columnar_metadata.h | 10 ++ src/include/columnar/columnar_tableam.h | 12 +- src/include/distributed/backend_data.h | 3 +- src/include/distributed/citus_custom_scan.h | 5 +- .../distributed/citus_depended_object.h | 3 +- src/include/distributed/citus_nodefuncs.h | 3 +- src/include/distributed/citus_ruleutils.h | 3 +- src/include/distributed/colocation_utils.h | 3 +- .../distributed/combine_query_planner.h | 3 +- src/include/distributed/commands.h | 5 +- src/include/distributed/commands/multi_copy.h | 7 +- .../distributed/commands/utility_hook.h | 6 +- .../distributed/connection_management.h | 8 +- .../distributed/coordinator_protocol.h | 8 +- src/include/distributed/deparse_shard_query.h | 1 + src/include/distributed/deparser.h | 4 +- .../distributed_deadlock_detection.h | 3 +- .../distributed/distributed_execution_locks.h | 1 + src/include/distributed/distributed_planner.h | 5 +- src/include/distributed/enterprise.h | 1 + src/include/distributed/errormessage.h | 4 +- src/include/distributed/executor_util.h | 3 +- .../distributed/foreign_key_relationship.h | 6 +- src/include/distributed/hash_helpers.h | 4 +- .../distributed/insert_select_planner.h | 5 +- .../distributed/intermediate_results.h | 3 +- src/include/distributed/listutils.h | 4 +- .../local_distributed_join_planner.h | 1 + src/include/distributed/lock_graph.h | 4 +- src/include/distributed/merge_planner.h | 1 + src/include/distributed/metadata/dependency.h | 3 +- src/include/distributed/metadata_cache.h | 4 +- src/include/distributed/metadata_sync.h | 3 +- src/include/distributed/metadata_utility.h | 5 +- src/include/distributed/multi_executor.h | 2 +- src/include/distributed/multi_explain.h | 3 +- .../distributed/multi_logical_planner.h | 9 +- .../distributed/multi_logical_replication.h | 1 + .../distributed/multi_partitioning_utils.h | 3 +- .../distributed/multi_physical_planner.h | 19 ++- src/include/distributed/multi_progress.h | 1 + .../distributed/multi_router_planner.h | 5 +- src/include/distributed/placement_access.h | 2 + .../distributed/query_colocation_checker.h | 3 +- .../distributed/query_pushdown_planning.h | 4 +- src/include/distributed/query_utils.h | 1 + src/include/distributed/recursive_planning.h | 8 +- src/include/distributed/relay_utility.h | 1 + src/include/distributed/remote_transaction.h | 3 +- .../replication_origin_session_utils.h | 2 + src/include/distributed/resource_lock.h | 4 +- src/include/distributed/shard_pruning.h | 3 +- src/include/distributed/shard_rebalancer.h | 2 + src/include/distributed/shard_transfer.h | 3 +- src/include/distributed/shardinterval_utils.h | 5 +- .../distributed/transaction_management.h | 1 - src/include/distributed/tuple_destination.h | 3 +- .../distributed/utils/citus_stat_tenants.h | 3 +- src/include/distributed/utils/directory.h | 1 + src/include/distributed/utils/function.h | 1 + src/include/distributed/version_compat.h | 12 +- src/include/distributed/worker_manager.h | 2 +- src/include/distributed/worker_protocol.h | 4 +- src/include/distributed/worker_transaction.h | 3 +- 332 files changed, 2912 insertions(+), 2318 deletions(-) create mode 100755 ci/include_grouping.py create mode 100755 ci/sort_and_group_includes.sh diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 6b33c658f..ba3c4f8e3 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -76,6 +76,8 @@ jobs: run: ci/editorconfig.sh && git diff --exit-code - name: Remove useless declarations run: ci/remove_useless_declarations.sh && git diff --cached --exit-code + - name: Sort and group includes + run: ci/sort_and_group_includes.sh && git diff --exit-code - name: Normalize test output run: ci/normalize_expected.sh && git diff --exit-code - name: Check for C-style comments in migration files diff --git a/ci/README.md b/ci/README.md index 37ef94f4f..b8dad35ac 100644 --- a/ci/README.md +++ b/ci/README.md @@ -385,3 +385,18 @@ definitions are in alphabetical order. ## `print_stack_trace.sh` This script prints stack traces for failed tests, if they left core files. + +## `sort_and_group_includes.sh` + +This script checks and fixes issues with include grouping and sorting in C files. + +Includes are grouped in the following groups: + - System includes (eg. `#include `) + - Postgres.h include (eg. `#include "postgres.h"`) + - Toplevel postgres includes (includes not in a directory eg. `#include "miscadmin.h`) + - Postgres includes in a directory (eg. `#include "catalog/pg_type.h"`) + - Toplevel citus includes (includes not in a directory eg. `#include "pg_version_constants.h"`) + - Columnar includes (eg. `#include "columnar/columnar.h"`) + - Distributed includes (eg. `#include "distributed/maintenanced.h"`) + +Within every group the include lines are sorted alphabetically. diff --git a/ci/fix_style.sh b/ci/fix_style.sh index 3d6e7ae83..bb78d5f50 100755 --- a/ci/fix_style.sh +++ b/ci/fix_style.sh @@ -19,3 +19,4 @@ ci/disallow_long_changelog_entries.sh ci/normalize_expected.sh ci/fix_gitignore.sh ci/print_stack_trace.sh +ci/sort_and_group_includes.sh diff --git a/ci/include_grouping.py b/ci/include_grouping.py new file mode 100755 index 000000000..4b1370d61 --- /dev/null +++ b/ci/include_grouping.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +""" +easy command line to run against all citus-style checked files: + +$ git ls-files \ + | git check-attr --stdin citus-style \ + | grep 'citus-style: set' \ + | awk '{print $1}' \ + | cut -d':' -f1 \ + | xargs -n1 ./ci/include_grouping.py +""" + +import collections +import os +import sys + + +def main(args): + if len(args) < 2: + print("Usage: include_grouping.py ") + return + + file = args[1] + if not os.path.isfile(file): + sys.exit(f"File '{file}' does not exist") + + with open(file, "r") as in_file: + with open(file + ".tmp", "w") as out_file: + includes = [] + skipped_lines = [] + + # This calls print_sorted_includes on a set of consecutive #include lines. + # This implicitly keeps separation of any #include lines that are contained in + # an #ifdef, because it will order the #include lines inside and after the + # #ifdef completely separately. + for line in in_file: + # if a line starts with #include we don't want to print it yet, instead we + # want to collect all consecutive #include lines + if line.startswith("#include"): + includes.append(line) + skipped_lines = [] + continue + + # if we have collected any #include lines, we want to print them sorted + # before printing the current line. However, if the current line is empty + # we want to perform a lookahead to see if the next line is an #include. + # To maintain any separation between #include lines and their subsequent + # lines we keep track of all lines we have skipped inbetween. + if len(includes) > 0: + if len(line.strip()) == 0: + skipped_lines.append(line) + continue + + # we have includes that need to be grouped before printing the current + # line. + print_sorted_includes(includes, file=out_file) + includes = [] + + # print any skipped lines + print("".join(skipped_lines), end="", file=out_file) + skipped_lines = [] + + print(line, end="", file=out_file) + + # move out_file to file + os.rename(file + ".tmp", file) + + +def print_sorted_includes(includes, file=sys.stdout): + default_group_key = 1 + groups = collections.defaultdict(set) + + # define the groups that we separate correctly. The matchers are tested in the order + # of their priority field. The first matcher that matches the include is used to + # assign the include to a group. + # The groups are printed in the order of their group_key. + matchers = [ + { + "name": "system includes", + "matcher": lambda x: x.startswith("<"), + "group_key": -2, + "priority": 0, + }, + { + "name": "toplevel postgres includes", + "matcher": lambda x: "/" not in x, + "group_key": 0, + "priority": 9, + }, + { + "name": "postgres.h", + "matcher": lambda x: x.strip() in ['"postgres.h"'], + "group_key": -1, + "priority": -1, + }, + { + "name": "toplevel citus inlcudes", + "matcher": lambda x: x.strip() + in [ + '"citus_version.h"', + '"pg_version_compat.h"', + '"pg_version_constants.h"', + ], + "group_key": 3, + "priority": 0, + }, + { + "name": "columnar includes", + "matcher": lambda x: x.startswith('"columnar/'), + "group_key": 4, + "priority": 1, + }, + { + "name": "distributed includes", + "matcher": lambda x: x.startswith('"distributed/'), + "group_key": 5, + "priority": 1, + }, + ] + matchers.sort(key=lambda x: x["priority"]) + + # throughout our codebase we have some includes where either postgres or citus + # includes are wrongfully included with the syntax for system includes. Before we + # try to match those we will change the <> to "" to make them match our system. This + # will also rewrite the include to the correct syntax. + common_system_include_error_prefixes = [" 0: + print(file=file) + includes = group[1] + print("".join(sorted(includes)), end="", file=file) + + +if __name__ == "__main__": + main(sys.argv) diff --git a/ci/sort_and_group_includes.sh b/ci/sort_and_group_includes.sh new file mode 100755 index 000000000..1c3a91458 --- /dev/null +++ b/ci/sort_and_group_includes.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set -euo pipefail +# shellcheck disable=SC1091 +source ci/ci_helpers.sh + +git ls-files \ + | git check-attr --stdin citus-style \ + | grep 'citus-style: set' \ + | awk '{print $1}' \ + | cut -d':' -f1 \ + | xargs -n1 ./ci/include_grouping.py diff --git a/src/backend/columnar/columnar.c b/src/backend/columnar/columnar.c index 85ec06d00..4914bbc3a 100644 --- a/src/backend/columnar/columnar.c +++ b/src/backend/columnar/columnar.c @@ -11,16 +11,18 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" - #include #include +#include "postgres.h" + #include "miscadmin.h" + #include "utils/guc.h" #include "utils/rel.h" #include "citus_version.h" + #include "columnar/columnar.h" #include "columnar/columnar_tableam.h" diff --git a/src/backend/columnar/columnar_compression.c b/src/backend/columnar/columnar_compression.c index 50cdfb01b..2ff35da98 100644 --- a/src/backend/columnar/columnar_compression.c +++ b/src/backend/columnar/columnar_compression.c @@ -13,13 +13,14 @@ */ #include "postgres.h" -#include "citus_version.h" #include "common/pg_lzcompress.h" #include "lib/stringinfo.h" -#include "columnar/columnar_compression.h" +#include "citus_version.h" #include "pg_version_constants.h" +#include "columnar/columnar_compression.h" + #if HAVE_CITUS_LIBLZ4 #include #endif diff --git a/src/backend/columnar/columnar_customscan.c b/src/backend/columnar/columnar_customscan.c index 4ea96a121..9ed82a5bf 100644 --- a/src/backend/columnar/columnar_customscan.c +++ b/src/backend/columnar/columnar_customscan.c @@ -10,18 +10,17 @@ *------------------------------------------------------------------------- */ -#include "citus_version.h" +#include #include "postgres.h" -#include +#include "miscadmin.h" #include "access/amapi.h" #include "access/skey.h" #include "catalog/pg_am.h" #include "catalog/pg_statistic.h" #include "commands/defrem.h" -#include "miscadmin.h" #include "nodes/extensible.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" @@ -44,10 +43,13 @@ #include "utils/selfuncs.h" #include "utils/spccache.h" +#include "citus_version.h" + #include "columnar/columnar.h" #include "columnar/columnar_customscan.h" #include "columnar/columnar_metadata.h" #include "columnar/columnar_tableam.h" + #include "distributed/listutils.h" /* diff --git a/src/backend/columnar/columnar_debug.c b/src/backend/columnar/columnar_debug.c index c60919513..bf12108a9 100644 --- a/src/backend/columnar/columnar_debug.c +++ b/src/backend/columnar/columnar_debug.c @@ -11,12 +11,12 @@ #include "postgres.h" #include "funcapi.h" +#include "miscadmin.h" + #include "access/nbtree.h" #include "access/table.h" #include "catalog/pg_am.h" #include "catalog/pg_type.h" -#include "pg_version_constants.h" -#include "miscadmin.h" #include "storage/fd.h" #include "storage/smgr.h" #include "utils/guc.h" @@ -25,6 +25,8 @@ #include "utils/tuplestore.h" #include "pg_version_compat.h" +#include "pg_version_constants.h" + #include "columnar/columnar.h" #include "columnar/columnar_storage.h" #include "columnar/columnar_version_compat.h" diff --git a/src/backend/columnar/columnar_metadata.c b/src/backend/columnar/columnar_metadata.c index e7a6bfa95..215f96091 100644 --- a/src/backend/columnar/columnar_metadata.c +++ b/src/backend/columnar/columnar_metadata.c @@ -19,48 +19,51 @@ */ +#include + #include "postgres.h" +#include "miscadmin.h" +#include "port.h" #include "safe_lib.h" -#include "citus_version.h" -#include "columnar/columnar.h" -#include "columnar/columnar_storage.h" -#include "columnar/columnar_version_compat.h" -#include "distributed/listutils.h" - -#include #include "access/heapam.h" #include "access/htup_details.h" #include "access/nbtree.h" #include "access/xact.h" #include "catalog/indexing.h" -#include "catalog/pg_namespace.h" -#include "catalog/pg_collation.h" -#include "catalog/pg_type.h" #include "catalog/namespace.h" +#include "catalog/pg_collation.h" +#include "catalog/pg_namespace.h" +#include "catalog/pg_type.h" #include "commands/defrem.h" #include "commands/sequence.h" #include "commands/trigger.h" #include "executor/executor.h" #include "executor/spi.h" -#include "miscadmin.h" -#include "nodes/execnodes.h" #include "lib/stringinfo.h" -#if PG_VERSION_NUM >= PG_VERSION_16 -#include "parser/parse_relation.h" -#endif -#include "port.h" +#include "nodes/execnodes.h" #include "storage/fd.h" #include "storage/lmgr.h" #include "storage/procarray.h" #include "storage/smgr.h" #include "utils/builtins.h" #include "utils/fmgroids.h" -#include "utils/memutils.h" #include "utils/lsyscache.h" +#include "utils/memutils.h" #include "utils/rel.h" + +#include "citus_version.h" +#include "pg_version_constants.h" + +#include "columnar/columnar.h" +#include "columnar/columnar_storage.h" +#include "columnar/columnar_version_compat.h" + +#include "distributed/listutils.h" + #if PG_VERSION_NUM >= PG_VERSION_16 +#include "parser/parse_relation.h" #include "storage/relfilelocator.h" #include "utils/relfilenumbermap.h" #else diff --git a/src/backend/columnar/columnar_reader.c b/src/backend/columnar/columnar_reader.c index 526dd03cb..7ef0d15d7 100644 --- a/src/backend/columnar/columnar_reader.c +++ b/src/backend/columnar/columnar_reader.c @@ -22,16 +22,15 @@ #include "access/xact.h" #include "catalog/pg_am.h" #include "commands/defrem.h" -#include "distributed/listutils.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/optimizer.h" #include "optimizer/clauses.h" +#include "optimizer/optimizer.h" #include "optimizer/restrictinfo.h" #include "storage/fd.h" #include "utils/guc.h" -#include "utils/memutils.h" #include "utils/lsyscache.h" +#include "utils/memutils.h" #include "utils/rel.h" #include "columnar/columnar.h" @@ -39,6 +38,8 @@ #include "columnar/columnar_tableam.h" #include "columnar/columnar_version_compat.h" +#include "distributed/listutils.h" + #define UNEXPECTED_STRIPE_READ_ERR_MSG \ "attempted to read an unexpected stripe while reading columnar " \ "table %s, stripe with id=" UINT64_FORMAT " is not flushed" diff --git a/src/backend/columnar/columnar_storage.c b/src/backend/columnar/columnar_storage.c index 21aa7ab9c..0ae6ccca3 100644 --- a/src/backend/columnar/columnar_storage.c +++ b/src/backend/columnar/columnar_storage.c @@ -36,11 +36,11 @@ #include "postgres.h" +#include "miscadmin.h" #include "safe_lib.h" #include "access/generic_xlog.h" #include "catalog/storage.h" -#include "miscadmin.h" #include "storage/bufmgr.h" #include "storage/lmgr.h" diff --git a/src/backend/columnar/columnar_tableam.c b/src/backend/columnar/columnar_tableam.c index dade931df..40486d08f 100644 --- a/src/backend/columnar/columnar_tableam.c +++ b/src/backend/columnar/columnar_tableam.c @@ -1,42 +1,38 @@ -#include "citus_version.h" +#include #include "postgres.h" -#include - #include "miscadmin.h" +#include "pgstat.h" +#include "safe_lib.h" +#include "access/detoast.h" #include "access/genam.h" #include "access/heapam.h" #include "access/multixact.h" #include "access/rewriteheap.h" #include "access/tableam.h" #include "access/tsmapi.h" -#include "access/detoast.h" #include "access/xact.h" #include "catalog/catalog.h" #include "catalog/index.h" #include "catalog/namespace.h" #include "catalog/objectaccess.h" #include "catalog/pg_am.h" +#include "catalog/pg_extension.h" #include "catalog/pg_publication.h" #include "catalog/pg_trigger.h" -#include "catalog/pg_extension.h" #include "catalog/storage.h" #include "catalog/storage_xlog.h" #include "commands/defrem.h" +#include "commands/extension.h" #include "commands/progress.h" #include "commands/vacuum.h" -#include "commands/extension.h" #include "executor/executor.h" #include "nodes/makefuncs.h" #include "optimizer/plancat.h" -#include "pg_version_compat.h" -#include "pgstat.h" -#include "safe_lib.h" #include "storage/bufmgr.h" #include "storage/bufpage.h" -#include "storage/bufmgr.h" #include "storage/lmgr.h" #include "storage/predicate.h" #include "storage/procarray.h" @@ -44,17 +40,22 @@ #include "tcop/utility.h" #include "utils/builtins.h" #include "utils/fmgroids.h" +#include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/pg_rusage.h" #include "utils/rel.h" #include "utils/relcache.h" -#include "utils/lsyscache.h" #include "utils/syscache.h" + +#include "citus_version.h" +#include "pg_version_compat.h" + #include "columnar/columnar.h" #include "columnar/columnar_customscan.h" #include "columnar/columnar_storage.h" #include "columnar/columnar_tableam.h" #include "columnar/columnar_version_compat.h" + #include "distributed/listutils.h" /* diff --git a/src/backend/columnar/columnar_writer.c b/src/backend/columnar/columnar_writer.c index 3b510ce74..1bdc612c1 100644 --- a/src/backend/columnar/columnar_writer.c +++ b/src/backend/columnar/columnar_writer.c @@ -16,18 +16,25 @@ #include "postgres.h" +#include "miscadmin.h" #include "safe_lib.h" #include "access/heapam.h" #include "access/nbtree.h" #include "catalog/pg_am.h" -#include "miscadmin.h" -#include "pg_version_compat.h" #include "storage/fd.h" #include "storage/smgr.h" #include "utils/guc.h" #include "utils/memutils.h" #include "utils/rel.h" + +#include "pg_version_compat.h" +#include "pg_version_constants.h" + +#include "columnar/columnar.h" +#include "columnar/columnar_storage.h" +#include "columnar/columnar_version_compat.h" + #if PG_VERSION_NUM >= PG_VERSION_16 #include "storage/relfilelocator.h" #include "utils/relfilenumbermap.h" @@ -35,10 +42,6 @@ #include "utils/relfilenodemap.h" #endif -#include "columnar/columnar.h" -#include "columnar/columnar_storage.h" -#include "columnar/columnar_version_compat.h" - struct ColumnarWriteState { TupleDesc tupleDescriptor; diff --git a/src/backend/columnar/write_state_management.c b/src/backend/columnar/write_state_management.c index 27d902e61..7f35c5dd1 100644 --- a/src/backend/columnar/write_state_management.c +++ b/src/backend/columnar/write_state_management.c @@ -1,21 +1,17 @@ -#include "citus_version.h" - -#include "postgres.h" -#include "columnar/columnar.h" - - #include +#include "postgres.h" + #include "miscadmin.h" +#include "pgstat.h" #include "access/genam.h" #include "access/heapam.h" +#include "access/heaptoast.h" #include "access/multixact.h" #include "access/rewriteheap.h" #include "access/tsmapi.h" -#include "access/heaptoast.h" -#include "common/hashfn.h" #include "access/xact.h" #include "catalog/catalog.h" #include "catalog/index.h" @@ -26,14 +22,12 @@ #include "catalog/storage_xlog.h" #include "commands/progress.h" #include "commands/vacuum.h" +#include "common/hashfn.h" #include "executor/executor.h" #include "nodes/makefuncs.h" #include "optimizer/plancat.h" -#include "pg_version_compat.h" -#include "pgstat.h" #include "storage/bufmgr.h" #include "storage/bufpage.h" -#include "storage/bufmgr.h" #include "storage/lmgr.h" #include "storage/predicate.h" #include "storage/procarray.h" @@ -44,6 +38,10 @@ #include "utils/rel.h" #include "utils/syscache.h" +#include "citus_version.h" +#include "pg_version_compat.h" + +#include "columnar/columnar.h" #include "columnar/columnar_customscan.h" #include "columnar/columnar_tableam.h" #include "columnar/columnar_version_compat.h" diff --git a/src/backend/distributed/cdc/cdc_decoder.c b/src/backend/distributed/cdc/cdc_decoder.c index 2beb27772..cf9f4963b 100644 --- a/src/backend/distributed/cdc/cdc_decoder.c +++ b/src/backend/distributed/cdc/cdc_decoder.c @@ -8,8 +8,9 @@ *------------------------------------------------------------------------- */ -#include "cdc_decoder_utils.h" #include "postgres.h" + +#include "cdc_decoder_utils.h" #include "fmgr.h" #include "access/genam.h" diff --git a/src/backend/distributed/cdc/cdc_decoder_utils.c b/src/backend/distributed/cdc/cdc_decoder_utils.c index f5b23aa12..b571d18b9 100644 --- a/src/backend/distributed/cdc/cdc_decoder_utils.c +++ b/src/backend/distributed/cdc/cdc_decoder_utils.c @@ -8,18 +8,21 @@ *------------------------------------------------------------------------- */ #include "postgres.h" -#include "commands/extension.h" + +#include "cdc_decoder_utils.h" #include "fmgr.h" #include "miscadmin.h" + #include "access/genam.h" #include "access/heapam.h" +#include "catalog/pg_namespace.h" +#include "commands/extension.h" #include "common/hashfn.h" #include "common/string.h" #include "utils/fmgroids.h" -#include "utils/typcache.h" #include "utils/lsyscache.h" -#include "catalog/pg_namespace.h" -#include "cdc_decoder_utils.h" +#include "utils/typcache.h" + #include "distributed/pg_dist_partition.h" #include "distributed/pg_dist_shard.h" #include "distributed/relay_utility.h" diff --git a/src/backend/distributed/cdc/cdc_decoder_utils.h b/src/backend/distributed/cdc/cdc_decoder_utils.h index 46d1e4ae5..8b9cb298b 100644 --- a/src/backend/distributed/cdc/cdc_decoder_utils.h +++ b/src/backend/distributed/cdc/cdc_decoder_utils.h @@ -12,9 +12,11 @@ #define CITUS_CDC_DECODER_H #include "postgres.h" -#include "fmgr.h" -#include "replication/logical.h" + #include "c.h" +#include "fmgr.h" + +#include "replication/logical.h" #define InvalidRepOriginId 0 #define INVALID_SHARD_ID 0 diff --git a/src/backend/distributed/clock/causal_clock.c b/src/backend/distributed/clock/causal_clock.c index 74c87bad4..3d64757e3 100644 --- a/src/backend/distributed/clock/causal_clock.c +++ b/src/backend/distributed/clock/causal_clock.c @@ -11,36 +11,37 @@ #include #include "postgres.h" -#include "miscadmin.h" + #include "fmgr.h" #include "funcapi.h" #include "libpq-fe.h" +#include "miscadmin.h" -#include "utils/builtins.h" -#include "utils/datum.h" -#include "utils/numeric.h" -#include "utils/typcache.h" -#include "nodes/pg_list.h" #include "catalog/namespace.h" #include "commands/extension.h" #include "commands/sequence.h" #include "executor/spi.h" +#include "nodes/pg_list.h" #include "postmaster/postmaster.h" #include "storage/ipc.h" #include "storage/lwlock.h" +#include "storage/s_lock.h" #include "storage/shmem.h" #include "storage/spin.h" -#include "storage/s_lock.h" +#include "utils/builtins.h" +#include "utils/datum.h" +#include "utils/numeric.h" +#include "utils/typcache.h" #include "distributed/causal_clock.h" -#include "distributed/listutils.h" -#include "distributed/lock_graph.h" -#include "distributed/local_executor.h" -#include "distributed/metadata_cache.h" -#include "distributed/remote_commands.h" -#include "distributed/placement_connection.h" -#include "distributed/coordinator_protocol.h" #include "distributed/citus_safe_lib.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/listutils.h" +#include "distributed/local_executor.h" +#include "distributed/lock_graph.h" +#include "distributed/metadata_cache.h" +#include "distributed/placement_connection.h" +#include "distributed/remote_commands.h" #define SAVE_AND_PERSIST(c) \ do { \ diff --git a/src/backend/distributed/commands/alter_table.c b/src/backend/distributed/commands/alter_table.c index 8c2736a28..a81f23ad6 100644 --- a/src/backend/distributed/commands/alter_table.c +++ b/src/backend/distributed/commands/alter_table.c @@ -34,9 +34,16 @@ #include "catalog/pg_am.h" #include "catalog/pg_depend.h" #include "catalog/pg_rewrite_d.h" +#include "commands/defrem.h" +#include "executor/spi.h" +#include "nodes/pg_list.h" +#include "utils/builtins.h" +#include "utils/lsyscache.h" +#include "utils/syscache.h" + #include "columnar/columnar.h" #include "columnar/columnar_tableam.h" -#include "commands/defrem.h" + #include "distributed/colocation_utils.h" #include "distributed/commands.h" #include "distributed/commands/utility_hook.h" @@ -57,16 +64,11 @@ #include "distributed/reference_table_utils.h" #include "distributed/relation_access_tracking.h" #include "distributed/replication_origin_session_utils.h" -#include "distributed/shared_library_init.h" #include "distributed/shard_utils.h" +#include "distributed/shared_library_init.h" #include "distributed/tenant_schema_metadata.h" #include "distributed/worker_protocol.h" #include "distributed/worker_transaction.h" -#include "executor/spi.h" -#include "nodes/pg_list.h" -#include "utils/builtins.h" -#include "utils/lsyscache.h" -#include "utils/syscache.h" /* Table Conversion Types */ diff --git a/src/backend/distributed/commands/begin.c b/src/backend/distributed/commands/begin.c index 3ff28ac20..b19b04484 100644 --- a/src/backend/distributed/commands/begin.c +++ b/src/backend/distributed/commands/begin.c @@ -9,12 +9,14 @@ */ #include "postgres.h" + #include "c.h" +#include "nodes/parsenodes.h" + #include "distributed/commands.h" #include "distributed/listutils.h" #include "distributed/transaction_management.h" -#include "nodes/parsenodes.h" /* diff --git a/src/backend/distributed/commands/call.c b/src/backend/distributed/commands/call.c index 12a1d93b8..9e54513c6 100644 --- a/src/backend/distributed/commands/call.c +++ b/src/backend/distributed/commands/call.c @@ -11,12 +11,23 @@ */ #include "postgres.h" -#include "funcapi.h" -#include "pg_version_constants.h" +#include "funcapi.h" +#include "miscadmin.h" #include "catalog/pg_proc.h" #include "commands/defrem.h" +#include "nodes/nodeFuncs.h" +#include "nodes/parsenodes.h" +#include "nodes/primnodes.h" +#include "optimizer/clauses.h" +#include "tcop/dest.h" +#include "utils/lsyscache.h" +#include "utils/syscache.h" + +#include "pg_version_constants.h" + +#include "distributed/adaptive_executor.h" #include "distributed/backend_data.h" #include "distributed/citus_ruleutils.h" #include "distributed/colocation_utils.h" @@ -26,27 +37,17 @@ #include "distributed/connection_management.h" #include "distributed/deparse_shard_query.h" #include "distributed/function_call_delegation.h" -#include "distributed/metadata_utility.h" #include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" #include "distributed/multi_executor.h" #include "distributed/multi_physical_planner.h" -#include "distributed/adaptive_executor.h" #include "distributed/reference_table_utils.h" #include "distributed/remote_commands.h" -#include "distributed/reference_table_utils.h" #include "distributed/shard_pruning.h" #include "distributed/tuple_destination.h" #include "distributed/version_compat.h" -#include "distributed/worker_manager.h" #include "distributed/worker_log_messages.h" -#include "optimizer/clauses.h" -#include "nodes/nodeFuncs.h" -#include "nodes/parsenodes.h" -#include "nodes/primnodes.h" -#include "miscadmin.h" -#include "tcop/dest.h" -#include "utils/lsyscache.h" -#include "utils/syscache.h" +#include "distributed/worker_manager.h" /* global variable tracking whether we are in a delegated procedure call */ diff --git a/src/backend/distributed/commands/cascade_table_operation_for_connected_relations.c b/src/backend/distributed/commands/cascade_table_operation_for_connected_relations.c index 9b22fb161..c88367462 100644 --- a/src/backend/distributed/commands/cascade_table_operation_for_connected_relations.c +++ b/src/backend/distributed/commands/cascade_table_operation_for_connected_relations.c @@ -12,12 +12,19 @@ #include "postgres.h" -#include "pg_version_constants.h" +#include "miscadmin.h" #include "access/xact.h" #include "catalog/pg_constraint.h" -#include "distributed/commands/utility_hook.h" +#include "executor/spi.h" +#include "utils/builtins.h" +#include "utils/lsyscache.h" +#include "utils/syscache.h" + +#include "pg_version_constants.h" + #include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" #include "distributed/foreign_key_relationship.h" #include "distributed/listutils.h" #include "distributed/local_executor.h" @@ -26,11 +33,6 @@ #include "distributed/reference_table_utils.h" #include "distributed/relation_access_tracking.h" #include "distributed/worker_protocol.h" -#include "executor/spi.h" -#include "miscadmin.h" -#include "utils/builtins.h" -#include "utils/lsyscache.h" -#include "utils/syscache.h" static void EnsureSequentialModeForCitusTableCascadeFunction(List *relationIdList); 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 c713ce099..d95cdd353 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 @@ -18,6 +18,7 @@ */ #include "postgres.h" + #include "miscadmin.h" #include "access/genam.h" @@ -25,29 +26,30 @@ #include "catalog/pg_constraint.h" #include "catalog/pg_statistic_ext.h" #include "catalog/pg_trigger.h" -#include "distributed/coordinator_protocol.h" +#include "foreign/foreign.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/lsyscache.h" +#include "utils/ruleutils.h" +#include "utils/syscache.h" + #include "distributed/citus_ruleutils.h" #include "distributed/colocation_utils.h" #include "distributed/commands.h" #include "distributed/commands/sequence.h" #include "distributed/commands/utility_hook.h" -#include "distributed/metadata/distobject.h" -#include "distributed/metadata/dependency.h" +#include "distributed/coordinator_protocol.h" #include "distributed/foreign_key_relationship.h" #include "distributed/listutils.h" #include "distributed/local_executor.h" +#include "distributed/metadata/dependency.h" +#include "distributed/metadata/distobject.h" #include "distributed/metadata_sync.h" #include "distributed/multi_partitioning_utils.h" #include "distributed/namespace_utils.h" #include "distributed/reference_table_utils.h" #include "distributed/worker_protocol.h" #include "distributed/worker_shard_visibility.h" -#include "utils/builtins.h" -#include "utils/fmgroids.h" -#include "utils/lsyscache.h" -#include "utils/ruleutils.h" -#include "utils/syscache.h" -#include "foreign/foreign.h" /* diff --git a/src/backend/distributed/commands/citus_global_signal.c b/src/backend/distributed/commands/citus_global_signal.c index b1f4cf187..23df2d0c1 100644 --- a/src/backend/distributed/commands/citus_global_signal.c +++ b/src/backend/distributed/commands/citus_global_signal.c @@ -11,14 +11,16 @@ #include "postgres.h" +#include "signal.h" + +#include "lib/stringinfo.h" + #include "pg_version_constants.h" #include "distributed/backend_data.h" #include "distributed/metadata_cache.h" #include "distributed/remote_commands.h" #include "distributed/worker_manager.h" -#include "lib/stringinfo.h" -#include "signal.h" static bool CitusSignalBackend(uint64 globalPID, uint64 timeout, int sig); diff --git a/src/backend/distributed/commands/cluster.c b/src/backend/distributed/commands/cluster.c index cdae6fc08..7a1dac302 100644 --- a/src/backend/distributed/commands/cluster.c +++ b/src/backend/distributed/commands/cluster.c @@ -10,11 +10,11 @@ #include "postgres.h" -#include "pg_version_constants.h" - +#include "catalog/namespace.h" #include "commands/defrem.h" -#include "catalog/namespace.h" +#include "pg_version_constants.h" + #include "distributed/commands.h" #include "distributed/commands/utility_hook.h" #include "distributed/listutils.h" diff --git a/src/backend/distributed/commands/collation.c b/src/backend/distributed/commands/collation.c index 521ce4b3d..5ce3d1436 100644 --- a/src/backend/distributed/commands/collation.c +++ b/src/backend/distributed/commands/collation.c @@ -10,30 +10,32 @@ */ #include "postgres.h" -#include "pg_version_compat.h" +#include "miscadmin.h" #include "access/htup_details.h" #include "access/xact.h" #include "catalog/pg_collation.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/commands.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" -#include "distributed/metadata_utility.h" -#include "distributed/metadata/dependency.h" -#include "distributed/metadata/distobject.h" -#include "distributed/metadata_sync.h" -#include "distributed/multi_executor.h" -#include "distributed/relation_access_tracking.h" -#include "distributed/worker_create_or_replace.h" -#include "pg_version_constants.h" -#include "distributed/worker_manager.h" #include "parser/parse_type.h" #include "utils/builtins.h" #include "utils/lsyscache.h" #include "utils/syscache.h" -#include "miscadmin.h" + +#include "pg_version_compat.h" +#include "pg_version_constants.h" + +#include "distributed/citus_safe_lib.h" +#include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" +#include "distributed/metadata/dependency.h" +#include "distributed/metadata/distobject.h" +#include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_executor.h" +#include "distributed/relation_access_tracking.h" +#include "distributed/worker_create_or_replace.h" +#include "distributed/worker_manager.h" static char * CreateCollationDDLInternal(Oid collationId, Oid *collowner, diff --git a/src/backend/distributed/commands/common.c b/src/backend/distributed/commands/common.c index 797981d47..347a99e8a 100644 --- a/src/backend/distributed/commands/common.c +++ b/src/backend/distributed/commands/common.c @@ -23,9 +23,9 @@ #include "distributed/commands/utility_hook.h" #include "distributed/deparser.h" #include "distributed/listutils.h" -#include "distributed/metadata_sync.h" #include "distributed/metadata/dependency.h" #include "distributed/metadata/distobject.h" +#include "distributed/metadata_sync.h" #include "distributed/multi_executor.h" #include "distributed/worker_transaction.h" diff --git a/src/backend/distributed/commands/create_distributed_table.c b/src/backend/distributed/commands/create_distributed_table.c index 768e20b73..9f3975a1e 100644 --- a/src/backend/distributed/commands/create_distributed_table.c +++ b/src/backend/distributed/commands/create_distributed_table.c @@ -9,10 +9,8 @@ */ #include "postgres.h" -#include "miscadmin.h" -#include "pg_version_constants.h" -#include "distributed/commands/utility_hook.h" +#include "miscadmin.h" #include "access/genam.h" #include "access/hash.h" @@ -37,42 +35,6 @@ #include "commands/sequence.h" #include "commands/tablecmds.h" #include "commands/trigger.h" -#include "distributed/commands/multi_copy.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/colocation_utils.h" -#include "distributed/commands.h" -#include "distributed/deparser.h" -#include "distributed/distributed_execution_locks.h" -#include "distributed/distribution_column.h" -#include "distributed/listutils.h" -#include "distributed/local_executor.h" -#include "distributed/metadata_utility.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata/dependency.h" -#include "distributed/metadata/distobject.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata_sync.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_logical_planner.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/pg_dist_colocation.h" -#include "distributed/pg_dist_partition.h" -#include "distributed/reference_table_utils.h" -#include "distributed/relation_access_tracking.h" -#include "distributed/remote_commands.h" -#include "distributed/replicate_none_dist_table_shard.h" -#include "distributed/resource_lock.h" -#include "distributed/shard_cleaner.h" -#include "distributed/shard_rebalancer.h" -#include "distributed/shard_split.h" -#include "distributed/shard_transfer.h" -#include "distributed/shared_library_init.h" -#include "distributed/shard_rebalancer.h" -#include "distributed/worker_protocol.h" -#include "distributed/worker_shard_visibility.h" -#include "distributed/worker_transaction.h" -#include "distributed/utils/distribution_column_map.h" -#include "distributed/version_compat.h" #include "executor/executor.h" #include "executor/spi.h" #include "nodes/execnodes.h" @@ -88,12 +50,51 @@ #include "tcop/pquery.h" #include "tcop/tcopprot.h" #include "utils/builtins.h" +#include "utils/inval.h" #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/rel.h" #include "utils/snapmgr.h" #include "utils/syscache.h" -#include "utils/inval.h" + +#include "pg_version_constants.h" + +#include "distributed/citus_ruleutils.h" +#include "distributed/colocation_utils.h" +#include "distributed/commands.h" +#include "distributed/commands/multi_copy.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/deparser.h" +#include "distributed/distributed_execution_locks.h" +#include "distributed/distribution_column.h" +#include "distributed/listutils.h" +#include "distributed/local_executor.h" +#include "distributed/metadata/dependency.h" +#include "distributed/metadata/distobject.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_logical_planner.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/pg_dist_colocation.h" +#include "distributed/pg_dist_partition.h" +#include "distributed/reference_table_utils.h" +#include "distributed/relation_access_tracking.h" +#include "distributed/remote_commands.h" +#include "distributed/replicate_none_dist_table_shard.h" +#include "distributed/resource_lock.h" +#include "distributed/shard_cleaner.h" +#include "distributed/shard_rebalancer.h" +#include "distributed/shard_split.h" +#include "distributed/shard_transfer.h" +#include "distributed/shared_library_init.h" +#include "distributed/utils/distribution_column_map.h" +#include "distributed/version_compat.h" +#include "distributed/worker_protocol.h" +#include "distributed/worker_shard_visibility.h" +#include "distributed/worker_transaction.h" /* common params that apply to all Citus table types */ diff --git a/src/backend/distributed/commands/database.c b/src/backend/distributed/commands/database.c index ade604d17..db0fdb8c4 100644 --- a/src/backend/distributed/commands/database.c +++ b/src/backend/distributed/commands/database.c @@ -10,6 +10,7 @@ */ #include "postgres.h" + #include "miscadmin.h" #include "access/heapam.h" diff --git a/src/backend/distributed/commands/dependencies.c b/src/backend/distributed/commands/dependencies.c index 6ce699cf5..d51678c04 100644 --- a/src/backend/distributed/commands/dependencies.c +++ b/src/backend/distributed/commands/dependencies.c @@ -10,9 +10,14 @@ #include "postgres.h" +#include "miscadmin.h" + #include "catalog/dependency.h" #include "catalog/objectaddress.h" #include "commands/extension.h" +#include "storage/lmgr.h" +#include "utils/lsyscache.h" + #include "distributed/commands.h" #include "distributed/commands/utility_hook.h" #include "distributed/connection_management.h" @@ -25,9 +30,6 @@ #include "distributed/remote_commands.h" #include "distributed/worker_manager.h" #include "distributed/worker_transaction.h" -#include "miscadmin.h" -#include "storage/lmgr.h" -#include "utils/lsyscache.h" static void EnsureDependenciesCanBeDistributed(const ObjectAddress *relationAddress); diff --git a/src/backend/distributed/commands/distribute_object_ops.c b/src/backend/distributed/commands/distribute_object_ops.c index 06390f65d..169fc6444 100644 --- a/src/backend/distributed/commands/distribute_object_ops.c +++ b/src/backend/distributed/commands/distribute_object_ops.c @@ -12,11 +12,12 @@ #include "postgres.h" -#include "distributed/commands.h" -#include "distributed/deparser.h" #include "pg_version_constants.h" -#include "distributed/version_compat.h" + +#include "distributed/commands.h" #include "distributed/commands/utility_hook.h" +#include "distributed/deparser.h" +#include "distributed/version_compat.h" static DistributeObjectOps NoDistributeOps = { .deparse = NULL, diff --git a/src/backend/distributed/commands/drop_distributed_table.c b/src/backend/distributed/commands/drop_distributed_table.c index 26579cd60..c3d488b09 100644 --- a/src/backend/distributed/commands/drop_distributed_table.c +++ b/src/backend/distributed/commands/drop_distributed_table.c @@ -9,20 +9,21 @@ */ #include "postgres.h" + #include "miscadmin.h" +#include "utils/builtins.h" +#include "utils/lsyscache.h" #include "distributed/colocation_utils.h" -#include "distributed/commands/utility_hook.h" #include "distributed/commands.h" -#include "distributed/metadata_utility.h" +#include "distributed/commands/utility_hook.h" #include "distributed/coordinator_protocol.h" #include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" #include "distributed/multi_partitioning_utils.h" #include "distributed/tenant_schema_metadata.h" #include "distributed/worker_transaction.h" -#include "utils/builtins.h" -#include "utils/lsyscache.h" /* local function forward declarations */ diff --git a/src/backend/distributed/commands/extension.c b/src/backend/distributed/commands/extension.c index 5bddf1ede..36267ff66 100644 --- a/src/backend/distributed/commands/extension.c +++ b/src/backend/distributed/commands/extension.c @@ -12,32 +12,35 @@ #include "access/genam.h" #include "access/xact.h" -#include "citus_version.h" #include "catalog/dependency.h" #include "catalog/pg_depend.h" #include "catalog/pg_extension_d.h" -#include "columnar/columnar.h" #include "catalog/pg_foreign_data_wrapper.h" #include "commands/defrem.h" #include "commands/extension.h" +#include "foreign/foreign.h" +#include "nodes/makefuncs.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/lsyscache.h" +#include "utils/syscache.h" + +#include "citus_version.h" + +#include "columnar/columnar.h" + #include "distributed/citus_ruleutils.h" #include "distributed/commands.h" #include "distributed/commands/utility_hook.h" +#include "distributed/coordinator_protocol.h" #include "distributed/deparser.h" #include "distributed/listutils.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata_sync.h" #include "distributed/metadata/dependency.h" #include "distributed/metadata/distobject.h" +#include "distributed/metadata_sync.h" #include "distributed/multi_executor.h" #include "distributed/relation_access_tracking.h" #include "distributed/transaction_management.h" -#include "foreign/foreign.h" -#include "nodes/makefuncs.h" -#include "utils/lsyscache.h" -#include "utils/builtins.h" -#include "utils/fmgroids.h" -#include "utils/syscache.h" /* Local functions forward declarations for helper functions */ diff --git a/src/backend/distributed/commands/foreign_constraint.c b/src/backend/distributed/commands/foreign_constraint.c index 709287c56..c1f2b83b6 100644 --- a/src/backend/distributed/commands/foreign_constraint.c +++ b/src/backend/distributed/commands/foreign_constraint.c @@ -12,27 +12,15 @@ #include "postgres.h" -#include "pg_version_constants.h" +#include "miscadmin.h" +#include "access/genam.h" #include "access/htup_details.h" #include "access/sysattr.h" #include "access/xact.h" #include "catalog/namespace.h" #include "catalog/pg_constraint.h" -#include "access/genam.h" #include "catalog/pg_type.h" -#include "distributed/colocation_utils.h" -#include "distributed/commands.h" -#include "distributed/commands/sequence.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/listutils.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/multi_join_order.h" -#include "distributed/namespace_utils.h" -#include "distributed/reference_table_utils.h" -#include "distributed/utils/array_type.h" -#include "distributed/version_compat.h" -#include "miscadmin.h" #include "utils/builtins.h" #include "utils/fmgroids.h" #include "utils/inval.h" @@ -42,6 +30,19 @@ #include "utils/ruleutils.h" #include "utils/syscache.h" +#include "pg_version_constants.h" + +#include "distributed/colocation_utils.h" +#include "distributed/commands.h" +#include "distributed/commands/sequence.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/listutils.h" +#include "distributed/multi_join_order.h" +#include "distributed/namespace_utils.h" +#include "distributed/reference_table_utils.h" +#include "distributed/utils/array_type.h" +#include "distributed/version_compat.h" + #define BehaviorIsRestrictOrNoAction(x) \ ((x) == FKCONSTR_ACTION_NOACTION || (x) == FKCONSTR_ACTION_RESTRICT) diff --git a/src/backend/distributed/commands/foreign_data_wrapper.c b/src/backend/distributed/commands/foreign_data_wrapper.c index c9a08c41a..a181e63a7 100644 --- a/src/backend/distributed/commands/foreign_data_wrapper.c +++ b/src/backend/distributed/commands/foreign_data_wrapper.c @@ -11,17 +11,18 @@ #include "postgres.h" #include "catalog/pg_foreign_data_wrapper.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/commands.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" -#include "distributed/metadata_sync.h" -#include "distributed/metadata/distobject.h" #include "foreign/foreign.h" #include "nodes/makefuncs.h" #include "nodes/parsenodes.h" #include "utils/syscache.h" +#include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" +#include "distributed/metadata/distobject.h" +#include "distributed/metadata_sync.h" + static bool NameListHasFDWOwnedByDistributedExtension(List *FDWNames); static ObjectAddress GetObjectAddressByFDWName(char *FDWName, bool missing_ok); diff --git a/src/backend/distributed/commands/foreign_server.c b/src/backend/distributed/commands/foreign_server.c index 7d19f9336..d2e575564 100644 --- a/src/backend/distributed/commands/foreign_server.c +++ b/src/backend/distributed/commands/foreign_server.c @@ -9,11 +9,18 @@ */ #include "postgres.h" + #include "miscadmin.h" #include "catalog/pg_foreign_server.h" -#include "distributed/commands/utility_hook.h" +#include "foreign/foreign.h" +#include "nodes/makefuncs.h" +#include "nodes/parsenodes.h" +#include "nodes/primnodes.h" +#include "utils/builtins.h" + #include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" #include "distributed/deparser.h" #include "distributed/listutils.h" #include "distributed/log_utils.h" @@ -21,11 +28,6 @@ #include "distributed/metadata_sync.h" #include "distributed/multi_executor.h" #include "distributed/worker_transaction.h" -#include "foreign/foreign.h" -#include "nodes/makefuncs.h" -#include "nodes/parsenodes.h" -#include "nodes/primnodes.h" -#include "utils/builtins.h" static char * GetForeignServerAlterOwnerCommand(Oid serverId); static Node * RecreateForeignServerStmt(Oid serverId); diff --git a/src/backend/distributed/commands/function.c b/src/backend/distributed/commands/function.c index 701041673..b76a6d5bf 100644 --- a/src/backend/distributed/commands/function.c +++ b/src/backend/distributed/commands/function.c @@ -18,43 +18,19 @@ */ #include "postgres.h" -#include "miscadmin.h" -#include "funcapi.h" -#include "pg_version_constants.h" +#include "funcapi.h" +#include "miscadmin.h" #include "access/genam.h" #include "access/htup_details.h" #include "access/xact.h" -#include "catalog/pg_aggregate.h" #include "catalog/dependency.h" #include "catalog/namespace.h" +#include "catalog/pg_aggregate.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" #include "commands/extension.h" -#include "distributed/citus_depended_object.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/colocation_utils.h" -#include "distributed/commands.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" -#include "distributed/maintenanced.h" -#include "distributed/metadata_utility.h" -#include "distributed/metadata/dependency.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata/distobject.h" -#include "distributed/metadata/pg_dist_object.h" -#include "distributed/metadata_sync.h" -#include "distributed/multi_executor.h" -#include "distributed/namespace_utils.h" -#include "distributed/pg_dist_node.h" -#include "distributed/reference_table_utils.h" -#include "distributed/relation_access_tracking.h" -#include "distributed/version_compat.h" -#include "distributed/worker_create_or_replace.h" -#include "distributed/worker_transaction.h" #include "nodes/makefuncs.h" #include "parser/parse_coerce.h" #include "parser/parse_type.h" @@ -63,8 +39,34 @@ #include "utils/fmgroids.h" #include "utils/fmgrprotos.h" #include "utils/lsyscache.h" -#include "utils/syscache.h" #include "utils/regproc.h" +#include "utils/syscache.h" + +#include "pg_version_constants.h" + +#include "distributed/citus_depended_object.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/citus_safe_lib.h" +#include "distributed/colocation_utils.h" +#include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" +#include "distributed/maintenanced.h" +#include "distributed/metadata/dependency.h" +#include "distributed/metadata/distobject.h" +#include "distributed/metadata/pg_dist_object.h" +#include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_executor.h" +#include "distributed/namespace_utils.h" +#include "distributed/pg_dist_node.h" +#include "distributed/reference_table_utils.h" +#include "distributed/relation_access_tracking.h" +#include "distributed/version_compat.h" +#include "distributed/worker_create_or_replace.h" +#include "distributed/worker_transaction.h" #define DISABLE_LOCAL_CHECK_FUNCTION_BODIES "SET LOCAL check_function_bodies TO off;" #define RESET_CHECK_FUNCTION_BODIES "RESET check_function_bodies;" diff --git a/src/backend/distributed/commands/grant.c b/src/backend/distributed/commands/grant.c index c7861060a..c4278cee1 100644 --- a/src/backend/distributed/commands/grant.c +++ b/src/backend/distributed/commands/grant.c @@ -10,15 +10,16 @@ #include "postgres.h" +#include "lib/stringinfo.h" +#include "nodes/parsenodes.h" +#include "utils/lsyscache.h" + #include "distributed/citus_ruleutils.h" #include "distributed/commands.h" #include "distributed/commands/utility_hook.h" #include "distributed/metadata/distobject.h" #include "distributed/metadata_cache.h" #include "distributed/version_compat.h" -#include "lib/stringinfo.h" -#include "nodes/parsenodes.h" -#include "utils/lsyscache.h" /* Local functions forward declarations for helper functions */ diff --git a/src/backend/distributed/commands/index.c b/src/backend/distributed/commands/index.c index 0b5cfb812..c41136176 100644 --- a/src/backend/distributed/commands/index.c +++ b/src/backend/distributed/commands/index.c @@ -10,7 +10,8 @@ #include "postgres.h" -#include "pg_version_constants.h" +#include "miscadmin.h" + #include "access/genam.h" #include "access/htup_details.h" #include "access/xact.h" @@ -18,32 +19,9 @@ #include "catalog/index.h" #include "catalog/namespace.h" #include "catalog/pg_class.h" -#if PG_VERSION_NUM >= PG_VERSION_16 -#include "catalog/pg_namespace.h" -#endif #include "commands/defrem.h" #include "commands/tablecmds.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/commands.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/deparse_shard_query.h" -#include "distributed/deparser.h" -#include "distributed/distributed_planner.h" -#include "distributed/listutils.h" -#include "distributed/local_executor.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/namespace_utils.h" -#include "distributed/resource_lock.h" -#include "distributed/relation_access_tracking.h" -#include "distributed/relation_utils.h" -#include "distributed/version_compat.h" -#include "distributed/worker_manager.h" #include "lib/stringinfo.h" -#include "miscadmin.h" #include "nodes/parsenodes.h" #include "parser/parse_utilcmd.h" #include "storage/lmgr.h" @@ -53,6 +31,32 @@ #include "utils/lsyscache.h" #include "utils/syscache.h" +#include "pg_version_constants.h" + +#include "distributed/citus_ruleutils.h" +#include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/deparse_shard_query.h" +#include "distributed/deparser.h" +#include "distributed/distributed_planner.h" +#include "distributed/listutils.h" +#include "distributed/local_executor.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/namespace_utils.h" +#include "distributed/relation_access_tracking.h" +#include "distributed/relation_utils.h" +#include "distributed/resource_lock.h" +#include "distributed/version_compat.h" +#include "distributed/worker_manager.h" + +#if PG_VERSION_NUM >= PG_VERSION_16 +#include "catalog/pg_namespace.h" +#endif + /* Local functions forward declarations for helper functions */ static void ErrorIfCreateIndexHasTooManyColumns(IndexStmt *createIndexStatement); diff --git a/src/backend/distributed/commands/local_multi_copy.c b/src/backend/distributed/commands/local_multi_copy.c index 7dbf0ae36..13ff88353 100644 --- a/src/backend/distributed/commands/local_multi_copy.c +++ b/src/backend/distributed/commands/local_multi_copy.c @@ -19,24 +19,27 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" -#include "commands/copy.h" -#include "catalog/namespace.h" -#include "parser/parse_relation.h" -#include "utils/lsyscache.h" -#include "nodes/makefuncs.h" -#include "safe_lib.h" #include /* for htons */ -#include "distributed/transmit.h" +#include "postgres.h" + +#include "safe_lib.h" + +#include "catalog/namespace.h" +#include "commands/copy.h" +#include "nodes/makefuncs.h" +#include "parser/parse_relation.h" +#include "utils/lsyscache.h" + #include "distributed/commands/multi_copy.h" #include "distributed/intermediate_results.h" -#include "distributed/multi_partitioning_utils.h" #include "distributed/local_executor.h" #include "distributed/local_multi_copy.h" -#include "distributed/shard_utils.h" -#include "distributed/version_compat.h" +#include "distributed/multi_partitioning_utils.h" #include "distributed/replication_origin_session_utils.h" +#include "distributed/shard_utils.h" +#include "distributed/transmit.h" +#include "distributed/version_compat.h" /* managed via GUC, default is 512 kB */ int LocalCopyFlushThresholdByte = 512 * 1024; diff --git a/src/backend/distributed/commands/multi_copy.c b/src/backend/distributed/commands/multi_copy.c index a5c7a47f4..c69e33f94 100644 --- a/src/backend/distributed/commands/multi_copy.c +++ b/src/backend/distributed/commands/multi_copy.c @@ -43,19 +43,18 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" -#include "libpq-fe.h" -#include "miscadmin.h" -#include "pgstat.h" - #include /* for htons */ #include /* for htons */ #include -#include "pg_version_constants.h" +#include "postgres.h" + +#include "libpq-fe.h" +#include "miscadmin.h" +#include "pgstat.h" -#include "access/htup_details.h" #include "access/htup.h" +#include "access/htup_details.h" #include "access/sdir.h" #include "access/sysattr.h" #include "access/xact.h" @@ -65,41 +64,8 @@ #include "commands/copy.h" #include "commands/defrem.h" #include "commands/progress.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/commands/multi_copy.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/intermediate_results.h" -#include "distributed/listutils.h" -#include "distributed/local_executor.h" -#include "distributed/log_utils.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/multi_router_planner.h" -#include "distributed/multi_executor.h" -#include "distributed/listutils.h" -#include "distributed/locally_reserved_shared_connections.h" -#include "distributed/placement_connection.h" -#include "distributed/relation_access_tracking.h" -#if PG_VERSION_NUM >= PG_VERSION_16 -#include "distributed/relation_utils.h" -#endif -#include "distributed/remote_commands.h" -#include "distributed/remote_transaction.h" -#include "distributed/replication_origin_session_utils.h" -#include "distributed/resource_lock.h" -#include "distributed/shard_pruning.h" -#include "distributed/shared_connection_stats.h" -#include "distributed/version_compat.h" -#include "distributed/worker_protocol.h" -#include "distributed/local_multi_copy.h" -#include "distributed/hash_helpers.h" -#include "distributed/transmit.h" #include "executor/executor.h" #include "foreign/foreign.h" - #include "libpq/libpq.h" #include "libpq/pqformat.h" #include "nodes/makefuncs.h" @@ -110,9 +76,43 @@ #include "tsearch/ts_locale.h" #include "utils/builtins.h" #include "utils/lsyscache.h" +#include "utils/memutils.h" #include "utils/rel.h" #include "utils/syscache.h" -#include "utils/memutils.h" + +#include "pg_version_constants.h" + +#include "distributed/citus_safe_lib.h" +#include "distributed/commands/multi_copy.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/hash_helpers.h" +#include "distributed/intermediate_results.h" +#include "distributed/listutils.h" +#include "distributed/local_executor.h" +#include "distributed/local_multi_copy.h" +#include "distributed/locally_reserved_shared_connections.h" +#include "distributed/log_utils.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/multi_router_planner.h" +#include "distributed/placement_connection.h" +#include "distributed/relation_access_tracking.h" +#include "distributed/remote_commands.h" +#include "distributed/remote_transaction.h" +#include "distributed/replication_origin_session_utils.h" +#include "distributed/resource_lock.h" +#include "distributed/shard_pruning.h" +#include "distributed/shared_connection_stats.h" +#include "distributed/transmit.h" +#include "distributed/version_compat.h" +#include "distributed/worker_protocol.h" + +#if PG_VERSION_NUM >= PG_VERSION_16 +#include "distributed/relation_utils.h" +#endif /* constant used in binary protocol */ diff --git a/src/backend/distributed/commands/owned.c b/src/backend/distributed/commands/owned.c index c8f6a4bbe..3b4b043f8 100644 --- a/src/backend/distributed/commands/owned.c +++ b/src/backend/distributed/commands/owned.c @@ -10,33 +10,20 @@ #include "postgres.h" +#include "miscadmin.h" + +#include "access/genam.h" #include "access/heapam.h" #include "access/htup_details.h" -#include "access/genam.h" #include "access/table.h" #include "access/xact.h" #include "catalog/catalog.h" +#include "catalog/objectaddress.h" #include "catalog/pg_auth_members.h" #include "catalog/pg_authid.h" #include "catalog/pg_db_role_setting.h" #include "catalog/pg_type.h" -#include "catalog/objectaddress.h" #include "commands/dbcommands.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/commands.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata/distobject.h" -#include "distributed/metadata_sync.h" -#include "distributed/metadata/distobject.h" -#include "distributed/multi_executor.h" -#include "distributed/relation_access_tracking.h" -#include "distributed/version_compat.h" -#include "distributed/worker_transaction.h" -#include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" @@ -44,8 +31,22 @@ #include "utils/builtins.h" #include "utils/fmgroids.h" #include "utils/rel.h" -#include "utils/varlena.h" #include "utils/syscache.h" +#include "utils/varlena.h" + +#include "distributed/citus_ruleutils.h" +#include "distributed/citus_safe_lib.h" +#include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" +#include "distributed/metadata/distobject.h" +#include "distributed/metadata_sync.h" +#include "distributed/multi_executor.h" +#include "distributed/relation_access_tracking.h" +#include "distributed/version_compat.h" +#include "distributed/worker_transaction.h" /* * PreprocessDropOwnedStmt finds the distributed role out of the ones diff --git a/src/backend/distributed/commands/policy.c b/src/backend/distributed/commands/policy.c index 0d66e150e..a2a926b66 100644 --- a/src/backend/distributed/commands/policy.c +++ b/src/backend/distributed/commands/policy.c @@ -10,15 +10,10 @@ */ #include "postgres.h" +#include "miscadmin.h" + #include "catalog/namespace.h" #include "commands/policy.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/commands.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/listutils.h" -#include "distributed/metadata_cache.h" -#include "miscadmin.h" #include "nodes/makefuncs.h" #include "parser/parse_clause.h" #include "parser/parse_relation.h" @@ -27,6 +22,13 @@ #include "utils/builtins.h" #include "utils/ruleutils.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" + static const char * unparse_policy_command(const char aclchar); static RowSecurityPolicy * GetPolicyByName(Oid relationId, const char *policyName); diff --git a/src/backend/distributed/commands/publication.c b/src/backend/distributed/commands/publication.c index f225b0fca..c1cfd5e77 100644 --- a/src/backend/distributed/commands/publication.c +++ b/src/backend/distributed/commands/publication.c @@ -9,18 +9,11 @@ */ #include "postgres.h" + #include "miscadmin.h" #include "catalog/pg_publication.h" #include "catalog/pg_publication_rel.h" -#include "distributed/commands.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" -#include "distributed/metadata_utility.h" -#include "distributed/metadata_sync.h" -#include "distributed/metadata/distobject.h" -#include "distributed/reference_table_utils.h" -#include "distributed/worker_create_or_replace.h" #include "nodes/makefuncs.h" #include "nodes/parsenodes.h" #include "utils/builtins.h" @@ -29,6 +22,15 @@ #include "pg_version_compat.h" +#include "distributed/commands.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" +#include "distributed/metadata/distobject.h" +#include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" +#include "distributed/reference_table_utils.h" +#include "distributed/worker_create_or_replace.h" + static CreatePublicationStmt * BuildCreatePublicationStmt(Oid publicationId); #if (PG_VERSION_NUM >= PG_VERSION_15) diff --git a/src/backend/distributed/commands/rename.c b/src/backend/distributed/commands/rename.c index 5e313d68c..362fc57bb 100644 --- a/src/backend/distributed/commands/rename.c +++ b/src/backend/distributed/commands/rename.c @@ -12,11 +12,12 @@ #include "catalog/index.h" #include "catalog/namespace.h" +#include "nodes/parsenodes.h" +#include "utils/lsyscache.h" + #include "distributed/commands.h" #include "distributed/commands/utility_hook.h" #include "distributed/metadata_cache.h" -#include "nodes/parsenodes.h" -#include "utils/lsyscache.h" /* diff --git a/src/backend/distributed/commands/role.c b/src/backend/distributed/commands/role.c index 3177c73a0..15b5aa511 100644 --- a/src/backend/distributed/commands/role.c +++ b/src/backend/distributed/commands/role.c @@ -10,38 +10,21 @@ #include "postgres.h" -#include "pg_version_compat.h" - -#include "pg_version_constants.h" +#include "miscadmin.h" +#include "access/genam.h" #include "access/heapam.h" #include "access/htup_details.h" -#include "access/genam.h" #include "access/table.h" #include "access/xact.h" #include "catalog/catalog.h" +#include "catalog/objectaddress.h" #include "catalog/pg_auth_members.h" #include "catalog/pg_authid.h" #include "catalog/pg_db_role_setting.h" #include "catalog/pg_shseclabel.h" #include "catalog/pg_type.h" -#include "catalog/objectaddress.h" #include "commands/dbcommands.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/commands.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata/distobject.h" -#include "distributed/metadata_sync.h" -#include "distributed/metadata/distobject.h" -#include "distributed/multi_executor.h" -#include "distributed/relation_access_tracking.h" -#include "distributed/version_compat.h" -#include "distributed/worker_transaction.h" -#include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" @@ -49,11 +32,28 @@ #include "utils/acl.h" #include "utils/builtins.h" #include "utils/fmgroids.h" -#include "utils/guc_tables.h" #include "utils/guc.h" +#include "utils/guc_tables.h" #include "utils/rel.h" -#include "utils/varlena.h" #include "utils/syscache.h" +#include "utils/varlena.h" + +#include "pg_version_compat.h" +#include "pg_version_constants.h" + +#include "distributed/citus_ruleutils.h" +#include "distributed/citus_safe_lib.h" +#include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" +#include "distributed/metadata/distobject.h" +#include "distributed/metadata_sync.h" +#include "distributed/multi_executor.h" +#include "distributed/relation_access_tracking.h" +#include "distributed/version_compat.h" +#include "distributed/worker_transaction.h" static const char * ExtractEncryptedPassword(Oid roleOid); static const char * CreateAlterRoleIfExistsCommand(AlterRoleStmt *stmt); diff --git a/src/backend/distributed/commands/schema.c b/src/backend/distributed/commands/schema.c index d48a73647..7f79897fa 100644 --- a/src/backend/distributed/commands/schema.c +++ b/src/backend/distributed/commands/schema.c @@ -19,28 +19,28 @@ #include "catalog/namespace.h" #include "catalog/pg_class.h" #include "catalog/pg_namespace.h" -#include "distributed/colocation_utils.h" -#include "distributed/commands.h" -#include -#include "distributed/commands/utility_hook.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" -#include "distributed/metadata/distobject.h" -#include "distributed/metadata_cache.h" -#include -#include "distributed/multi_executor.h" -#include "distributed/reference_table_utils.h" -#include "distributed/relation_access_tracking.h" -#include "distributed/resource_lock.h" -#include -#include -#include "distributed/tenant_schema_metadata.h" -#include "distributed/version_compat.h" #include "nodes/parsenodes.h" #include "utils/fmgroids.h" #include "utils/lsyscache.h" #include "utils/relcache.h" +#include "distributed/colocation_utils.h" +#include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/connection_management.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" +#include "distributed/metadata/distobject.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_sync.h" +#include "distributed/multi_executor.h" +#include "distributed/reference_table_utils.h" +#include "distributed/relation_access_tracking.h" +#include "distributed/remote_commands.h" +#include "distributed/resource_lock.h" +#include "distributed/tenant_schema_metadata.h" +#include "distributed/version_compat.h" + static List * GetObjectAddressBySchemaName(char *schemaName, bool missing_ok); static List * FilterDistributedSchemas(List *schemas); diff --git a/src/backend/distributed/commands/schema_based_sharding.c b/src/backend/distributed/commands/schema_based_sharding.c index 65d2b8127..7cde96982 100644 --- a/src/backend/distributed/commands/schema_based_sharding.c +++ b/src/backend/distributed/commands/schema_based_sharding.c @@ -7,27 +7,29 @@ */ #include "postgres.h" + #include "miscadmin.h" #include "access/genam.h" #include "catalog/catalog.h" #include "catalog/pg_namespace_d.h" #include "commands/extension.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/lsyscache.h" +#include "utils/syscache.h" + #include "distributed/argutils.h" #include "distributed/backend_data.h" #include "distributed/colocation_utils.h" #include "distributed/commands.h" #include "distributed/listutils.h" -#include "distributed/metadata_sync.h" #include "distributed/metadata/distobject.h" +#include "distributed/metadata_sync.h" #include "distributed/multi_partitioning_utils.h" #include "distributed/shard_transfer.h" #include "distributed/tenant_schema_metadata.h" #include "distributed/worker_shard_visibility.h" -#include "utils/builtins.h" -#include "utils/fmgroids.h" -#include "utils/lsyscache.h" -#include "utils/syscache.h" /* return value of CreateCitusMoveSchemaParams() */ diff --git a/src/backend/distributed/commands/seclabel.c b/src/backend/distributed/commands/seclabel.c index 208d186c7..3e1847dc9 100644 --- a/src/backend/distributed/commands/seclabel.c +++ b/src/backend/distributed/commands/seclabel.c @@ -16,8 +16,8 @@ #include "distributed/coordinator_protocol.h" #include "distributed/deparser.h" #include "distributed/log_utils.h" -#include "distributed/metadata_sync.h" #include "distributed/metadata/distobject.h" +#include "distributed/metadata_sync.h" /* diff --git a/src/backend/distributed/commands/sequence.c b/src/backend/distributed/commands/sequence.c index 9ff586c8c..4d838a882 100644 --- a/src/backend/distributed/commands/sequence.c +++ b/src/backend/distributed/commands/sequence.c @@ -16,6 +16,12 @@ #include "catalog/namespace.h" #include "commands/defrem.h" #include "commands/extension.h" +#include "nodes/makefuncs.h" +#include "nodes/parsenodes.h" +#include "rewrite/rewriteHandler.h" +#include "utils/builtins.h" +#include "utils/lsyscache.h" + #include "distributed/commands.h" #include "distributed/commands/sequence.h" #include "distributed/commands/utility_hook.h" @@ -24,12 +30,7 @@ #include "distributed/metadata/distobject.h" #include "distributed/metadata_cache.h" #include "distributed/metadata_sync.h" -#include "nodes/makefuncs.h" #include "distributed/worker_create_or_replace.h" -#include "nodes/parsenodes.h" -#include "rewrite/rewriteHandler.h" -#include "utils/builtins.h" -#include "utils/lsyscache.h" /* Local functions forward declarations for helper functions */ static bool OptionsSpecifyOwnedBy(List *optionList, Oid *ownedByTableId); diff --git a/src/backend/distributed/commands/statistics.c b/src/backend/distributed/commands/statistics.c index dae72ada9..5fac767fd 100644 --- a/src/backend/distributed/commands/statistics.c +++ b/src/backend/distributed/commands/statistics.c @@ -19,6 +19,8 @@ #include "postgres.h" +#include "miscadmin.h" + #include "access/genam.h" #include "access/htup_details.h" #include "access/xact.h" @@ -26,8 +28,16 @@ #include "catalog/pg_namespace.h" #include "catalog/pg_statistic_ext.h" #include "catalog/pg_type.h" -#include "distributed/commands/utility_hook.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/fmgrprotos.h" +#include "utils/lsyscache.h" +#include "utils/relcache.h" +#include "utils/ruleutils.h" +#include "utils/syscache.h" + #include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" #include "distributed/deparse_shard_query.h" #include "distributed/deparser.h" #include "distributed/listutils.h" @@ -37,14 +47,6 @@ #include "distributed/relation_access_tracking.h" #include "distributed/resource_lock.h" #include "distributed/worker_transaction.h" -#include "miscadmin.h" -#include "utils/builtins.h" -#include "utils/fmgroids.h" -#include "utils/fmgrprotos.h" -#include "utils/lsyscache.h" -#include "utils/relcache.h" -#include "utils/ruleutils.h" -#include "utils/syscache.h" #define DEFAULT_STATISTICS_TARGET -1 #define ALTER_INDEX_COLUMN_SET_STATS_COMMAND \ diff --git a/src/backend/distributed/commands/subscription.c b/src/backend/distributed/commands/subscription.c index 52519b680..f5f80d17a 100644 --- a/src/backend/distributed/commands/subscription.c +++ b/src/backend/distributed/commands/subscription.c @@ -8,21 +8,23 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" - -#include "safe_lib.h" - #include -#include "commands/defrem.h" -#include "distributed/commands.h" -#include "distributed/connection_management.h" -#include "pg_version_constants.h" -#include "distributed/version_compat.h" +#include "postgres.h" + #include "libpq-fe.h" +#include "safe_lib.h" + +#include "commands/defrem.h" #include "nodes/parsenodes.h" #include "utils/builtins.h" +#include "pg_version_constants.h" + +#include "distributed/commands.h" +#include "distributed/connection_management.h" +#include "distributed/version_compat.h" + static char * GenerateConninfoWithAuth(char *conninfo); diff --git a/src/backend/distributed/commands/table.c b/src/backend/distributed/commands/table.c index e8404d38c..074a789ed 100644 --- a/src/backend/distributed/commands/table.c +++ b/src/backend/distributed/commands/table.c @@ -9,7 +9,7 @@ */ #include "postgres.h" -#include "pg_version_constants.h" + #include "access/genam.h" #include "access/htup_details.h" #include "access/xact.h" @@ -20,28 +20,6 @@ #include "catalog/pg_depend.h" #include "catalog/pg_type.h" #include "commands/tablecmds.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/colocation_utils.h" -#include "distributed/commands.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/deparser.h" -#include "distributed/deparse_shard_query.h" -#include "distributed/distribution_column.h" -#include "distributed/foreign_key_relationship.h" -#include "distributed/local_executor.h" -#include "distributed/listutils.h" -#include "distributed/metadata_sync.h" -#include "distributed/metadata/dependency.h" -#include "distributed/metadata/distobject.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/reference_table_utils.h" -#include "distributed/relation_access_tracking.h" -#include "distributed/resource_lock.h" -#include "distributed/version_compat.h" -#include "distributed/worker_shard_visibility.h" -#include "distributed/tenant_schema_metadata.h" #include "foreign/foreign.h" #include "lib/stringinfo.h" #include "nodes/parsenodes.h" @@ -53,6 +31,31 @@ #include "utils/lsyscache.h" #include "utils/syscache.h" +#include "pg_version_constants.h" + +#include "distributed/citus_ruleutils.h" +#include "distributed/colocation_utils.h" +#include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/deparse_shard_query.h" +#include "distributed/deparser.h" +#include "distributed/distribution_column.h" +#include "distributed/foreign_key_relationship.h" +#include "distributed/listutils.h" +#include "distributed/local_executor.h" +#include "distributed/metadata/dependency.h" +#include "distributed/metadata/distobject.h" +#include "distributed/metadata_sync.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/reference_table_utils.h" +#include "distributed/relation_access_tracking.h" +#include "distributed/resource_lock.h" +#include "distributed/tenant_schema_metadata.h" +#include "distributed/version_compat.h" +#include "distributed/worker_shard_visibility.h" + /* controlled via GUC, should be accessed via GetEnableLocalReferenceForeignKeys() */ bool EnableLocalReferenceForeignKeys = true; diff --git a/src/backend/distributed/commands/text_search.c b/src/backend/distributed/commands/text_search.c index 54dfdae85..4a386e321 100644 --- a/src/backend/distributed/commands/text_search.c +++ b/src/backend/distributed/commands/text_search.c @@ -10,6 +10,8 @@ #include "postgres.h" +#include "fmgr.h" + #include "access/genam.h" #include "access/xact.h" #include "catalog/namespace.h" @@ -22,7 +24,6 @@ #include "commands/comment.h" #include "commands/defrem.h" #include "commands/extension.h" -#include "fmgr.h" #include "nodes/makefuncs.h" #include "tsearch/ts_cache.h" #include "tsearch/ts_public.h" diff --git a/src/backend/distributed/commands/trigger.c b/src/backend/distributed/commands/trigger.c index 0ec8287f5..74cb6259f 100644 --- a/src/backend/distributed/commands/trigger.c +++ b/src/backend/distributed/commands/trigger.c @@ -9,7 +9,6 @@ *------------------------------------------------------------------------- */ #include "postgres.h" -#include "pg_version_constants.h" #include "access/genam.h" #include "access/table.h" @@ -18,6 +17,14 @@ #include "catalog/pg_trigger.h" #include "commands/extension.h" #include "commands/trigger.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/fmgrprotos.h" +#include "utils/lsyscache.h" +#include "utils/syscache.h" + +#include "pg_version_constants.h" + #include "distributed/commands.h" #include "distributed/commands/utility_hook.h" #include "distributed/coordinator_protocol.h" @@ -29,11 +36,6 @@ #include "distributed/namespace_utils.h" #include "distributed/shard_utils.h" #include "distributed/worker_protocol.h" -#include "utils/builtins.h" -#include "utils/fmgrprotos.h" -#include "utils/fmgroids.h" -#include "utils/lsyscache.h" -#include "utils/syscache.h" /* appropriate lock modes for the owner relation according to postgres */ diff --git a/src/backend/distributed/commands/truncate.c b/src/backend/distributed/commands/truncate.c index 4de518a06..0eb43f529 100644 --- a/src/backend/distributed/commands/truncate.c +++ b/src/backend/distributed/commands/truncate.c @@ -9,12 +9,19 @@ */ #include "postgres.h" + #include "miscadmin.h" #include "catalog/namespace.h" #include "catalog/pg_class.h" #include "commands/tablecmds.h" #include "commands/trigger.h" +#include "storage/lmgr.h" +#include "utils/builtins.h" +#include "utils/lsyscache.h" +#include "utils/regproc.h" +#include "utils/rel.h" + #include "distributed/adaptive_executor.h" #include "distributed/citus_ruleutils.h" #include "distributed/commands.h" @@ -31,13 +38,8 @@ #include "distributed/reference_table_utils.h" #include "distributed/resource_lock.h" #include "distributed/transaction_management.h" -#include "distributed/worker_transaction.h" #include "distributed/worker_shard_visibility.h" -#include "storage/lmgr.h" -#include "utils/builtins.h" -#include "utils/lsyscache.h" -#include "utils/regproc.h" -#include "utils/rel.h" +#include "distributed/worker_transaction.h" /* Local functions forward declarations for unsupported command checks */ diff --git a/src/backend/distributed/commands/type.c b/src/backend/distributed/commands/type.c index ccb7bf528..b1e573638 100644 --- a/src/backend/distributed/commands/type.c +++ b/src/backend/distributed/commands/type.c @@ -43,7 +43,7 @@ #include "postgres.h" -#include "pg_version_constants.h" +#include "miscadmin.h" #include "access/genam.h" #include "access/htup_details.h" @@ -52,6 +52,18 @@ #include "catalog/pg_enum.h" #include "catalog/pg_type.h" #include "commands/extension.h" +#include "nodes/makefuncs.h" +#include "parser/parse_type.h" +#include "storage/lmgr.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/lsyscache.h" +#include "utils/regproc.h" +#include "utils/syscache.h" +#include "utils/typcache.h" + +#include "pg_version_constants.h" + #include "distributed/citus_safe_lib.h" #include "distributed/commands.h" #include "distributed/commands/utility_hook.h" @@ -64,20 +76,10 @@ #include "distributed/relation_access_tracking.h" #include "distributed/remote_commands.h" #include "distributed/transaction_management.h" -#include "distributed/worker_create_or_replace.h" #include "distributed/version_compat.h" +#include "distributed/worker_create_or_replace.h" #include "distributed/worker_manager.h" #include "distributed/worker_transaction.h" -#include "miscadmin.h" -#include "nodes/makefuncs.h" -#include "parser/parse_type.h" -#include "storage/lmgr.h" -#include "utils/builtins.h" -#include "utils/fmgroids.h" -#include "utils/lsyscache.h" -#include "utils/regproc.h" -#include "utils/syscache.h" -#include "utils/typcache.h" #define AlterEnumIsRename(stmt) (stmt->oldVal != NULL) #define AlterEnumIsAddValue(stmt) (stmt->oldVal == NULL) diff --git a/src/backend/distributed/commands/utility_hook.c b/src/backend/distributed/commands/utility_hook.c index 29d7e08da..b62dda9ad 100644 --- a/src/backend/distributed/commands/utility_hook.c +++ b/src/backend/distributed/commands/utility_hook.c @@ -25,9 +25,8 @@ *------------------------------------------------------------------------- */ -#include "pg_version_constants.h" - #include "postgres.h" + #include "miscadmin.h" #include "access/attnum.h" @@ -36,11 +35,25 @@ #include "catalog/catalog.h" #include "catalog/dependency.h" #include "catalog/pg_database.h" -#include "citus_version.h" #include "commands/dbcommands.h" #include "commands/defrem.h" #include "commands/extension.h" #include "commands/tablecmds.h" +#include "foreign/foreign.h" +#include "lib/stringinfo.h" +#include "nodes/makefuncs.h" +#include "nodes/parsenodes.h" +#include "nodes/pg_list.h" +#include "tcop/utility.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/inval.h" +#include "utils/lsyscache.h" +#include "utils/syscache.h" + +#include "citus_version.h" +#include "pg_version_constants.h" + #include "distributed/adaptive_executor.h" #include "distributed/backend_data.h" #include "distributed/citus_depended_object.h" @@ -49,19 +62,19 @@ #include "distributed/commands/multi_copy.h" #include "distributed/commands/utility_hook.h" /* IWYU pragma: keep */ #include "distributed/coordinator_protocol.h" -#include "distributed/deparser.h" #include "distributed/deparse_shard_query.h" +#include "distributed/deparser.h" #include "distributed/executor_util.h" #include "distributed/foreign_key_relationship.h" #include "distributed/listutils.h" #include "distributed/local_executor.h" #include "distributed/maintenanced.h" -#include "distributed/multi_logical_replication.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/metadata_sync.h" #include "distributed/metadata/distobject.h" +#include "distributed/metadata_sync.h" #include "distributed/multi_executor.h" #include "distributed/multi_explain.h" +#include "distributed/multi_logical_replication.h" +#include "distributed/multi_partitioning_utils.h" #include "distributed/multi_physical_planner.h" #include "distributed/reference_table_utils.h" #include "distributed/resource_lock.h" @@ -70,17 +83,6 @@ #include "distributed/version_compat.h" #include "distributed/worker_shard_visibility.h" #include "distributed/worker_transaction.h" -#include "foreign/foreign.h" -#include "lib/stringinfo.h" -#include "nodes/parsenodes.h" -#include "nodes/pg_list.h" -#include "nodes/makefuncs.h" -#include "tcop/utility.h" -#include "utils/builtins.h" -#include "utils/fmgroids.h" -#include "utils/inval.h" -#include "utils/lsyscache.h" -#include "utils/syscache.h" bool EnableDDLPropagation = true; /* ddl propagation is enabled */ diff --git a/src/backend/distributed/commands/vacuum.c b/src/backend/distributed/commands/vacuum.c index f1cf3cb31..5988a447d 100644 --- a/src/backend/distributed/commands/vacuum.c +++ b/src/backend/distributed/commands/vacuum.c @@ -10,10 +10,16 @@ #include "postgres.h" -#include "pg_version_constants.h" - +#include "access/xact.h" #include "commands/defrem.h" #include "commands/vacuum.h" +#include "postmaster/bgworker_internals.h" +#include "storage/lmgr.h" +#include "utils/builtins.h" +#include "utils/lsyscache.h" + +#include "pg_version_constants.h" + #include "distributed/adaptive_executor.h" #include "distributed/commands.h" #include "distributed/commands/utility_hook.h" @@ -24,11 +30,6 @@ #include "distributed/resource_lock.h" #include "distributed/transaction_management.h" #include "distributed/version_compat.h" -#include "storage/lmgr.h" -#include "utils/builtins.h" -#include "utils/lsyscache.h" -#include "postmaster/bgworker_internals.h" -#include "access/xact.h" #define VACUUM_PARALLEL_NOTSET -2 diff --git a/src/backend/distributed/commands/variableset.c b/src/backend/distributed/commands/variableset.c index 277f5b63f..2a3bc2f67 100644 --- a/src/backend/distributed/commands/variableset.c +++ b/src/backend/distributed/commands/variableset.c @@ -9,21 +9,23 @@ */ #include "postgres.h" + #include "c.h" #include "common/string.h" -#include "distributed/commands.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/metadata_cache.h" -#include "distributed/resource_lock.h" -#include "distributed/transaction_management.h" -#include "distributed/version_compat.h" +#include "lib/ilist.h" #include "storage/lmgr.h" #include "utils/builtins.h" #include "utils/lsyscache.h" -#include "lib/ilist.h" #include "utils/varlena.h" + +#include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/metadata_cache.h" #include "distributed/remote_commands.h" +#include "distributed/resource_lock.h" +#include "distributed/transaction_management.h" +#include "distributed/version_compat.h" /* * ShouldPropagateSetCommand determines whether a SET or RESET command should be diff --git a/src/backend/distributed/commands/view.c b/src/backend/distributed/commands/view.c index 7c4816144..0c39be4ca 100644 --- a/src/backend/distributed/commands/view.c +++ b/src/backend/distributed/commands/view.c @@ -9,23 +9,12 @@ */ #include "postgres.h" + #include "fmgr.h" #include "access/genam.h" #include "catalog/objectaddress.h" #include "commands/extension.h" -#include "distributed/commands.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/deparser.h" -#include "distributed/errormessage.h" -#include "distributed/listutils.h" -#include "distributed/metadata_sync.h" -#include "distributed/metadata/dependency.h" -#include "distributed/metadata/distobject.h" -#include "distributed/multi_executor.h" -#include "distributed/namespace_utils.h" -#include "distributed/worker_transaction.h" #include "executor/spi.h" #include "nodes/nodes.h" #include "nodes/pg_list.h" @@ -35,6 +24,19 @@ #include "utils/lsyscache.h" #include "utils/syscache.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/deparser.h" +#include "distributed/errormessage.h" +#include "distributed/listutils.h" +#include "distributed/metadata/dependency.h" +#include "distributed/metadata/distobject.h" +#include "distributed/metadata_sync.h" +#include "distributed/multi_executor.h" +#include "distributed/namespace_utils.h" +#include "distributed/worker_transaction.h" + /* * GUC controls some restrictions for local objects. For example, * if it is disabled, a local view with no distributed relation dependency diff --git a/src/backend/distributed/connection/connection_configuration.c b/src/backend/distributed/connection/connection_configuration.c index bf61f7fac..c6a34a9d7 100644 --- a/src/backend/distributed/connection/connection_configuration.c +++ b/src/backend/distributed/connection/connection_configuration.c @@ -12,6 +12,10 @@ #include "access/transam.h" #include "access/xact.h" +#include "mb/pg_wchar.h" +#include "postmaster/postmaster.h" +#include "utils/builtins.h" + #include "distributed/backend_data.h" #include "distributed/citus_safe_lib.h" #include "distributed/connection_management.h" @@ -19,10 +23,6 @@ #include "distributed/metadata_cache.h" #include "distributed/worker_manager.h" -#include "postmaster/postmaster.h" -#include "mb/pg_wchar.h" -#include "utils/builtins.h" - /* stores the string representation of our node connection GUC */ #ifdef USE_SSL char *NodeConninfo = "sslmode=require"; diff --git a/src/backend/distributed/connection/connection_management.c b/src/backend/distributed/connection/connection_management.c index 9439b38c5..64ec1904f 100644 --- a/src/backend/distributed/connection/connection_management.c +++ b/src/backend/distributed/connection/connection_management.c @@ -9,39 +9,39 @@ */ #include "postgres.h" -#include "pgstat.h" #include "libpq-fe.h" - #include "miscadmin.h" - +#include "pg_config.h" +#include "pgstat.h" #include "safe_lib.h" -#include "postmaster/postmaster.h" + #include "access/hash.h" #include "commands/dbcommands.h" +#include "mb/pg_wchar.h" +#include "portability/instr_time.h" +#include "postmaster/postmaster.h" +#include "storage/ipc.h" +#include "utils/hsearch.h" +#include "utils/memutils.h" + #include "distributed/backend_data.h" +#include "distributed/cancel_utils.h" #include "distributed/connection_management.h" -#include "distributed/errormessage.h" #include "distributed/error_codes.h" +#include "distributed/errormessage.h" +#include "distributed/hash_helpers.h" #include "distributed/listutils.h" #include "distributed/log_utils.h" #include "distributed/memutils.h" #include "distributed/metadata_cache.h" -#include "distributed/hash_helpers.h" #include "distributed/placement_connection.h" +#include "distributed/remote_commands.h" #include "distributed/run_from_same_connection.h" #include "distributed/shared_connection_stats.h" -#include "distributed/cancel_utils.h" -#include "distributed/remote_commands.h" #include "distributed/time_constants.h" #include "distributed/version_compat.h" #include "distributed/worker_log_messages.h" -#include "mb/pg_wchar.h" -#include "pg_config.h" -#include "portability/instr_time.h" -#include "storage/ipc.h" -#include "utils/hsearch.h" -#include "utils/memutils.h" int NodeConnectionTimeout = 30000; diff --git a/src/backend/distributed/connection/locally_reserved_shared_connections.c b/src/backend/distributed/connection/locally_reserved_shared_connections.c index 0a27ba17c..a64930b32 100644 --- a/src/backend/distributed/connection/locally_reserved_shared_connections.c +++ b/src/backend/distributed/connection/locally_reserved_shared_connections.c @@ -33,12 +33,15 @@ #include "postgres.h" -#include "pg_version_constants.h" - #include "miscadmin.h" #include "access/hash.h" #include "commands/dbcommands.h" +#include "common/hashfn.h" +#include "utils/builtins.h" + +#include "pg_version_constants.h" + #include "distributed/listutils.h" #include "distributed/locally_reserved_shared_connections.h" #include "distributed/metadata_cache.h" @@ -47,8 +50,6 @@ #include "distributed/shared_connection_stats.h" #include "distributed/tuplestore.h" #include "distributed/worker_manager.h" -#include "utils/builtins.h" -#include "common/hashfn.h" #define RESERVED_CONNECTION_COLUMNS 4 diff --git a/src/backend/distributed/connection/placement_connection.c b/src/backend/distributed/connection/placement_connection.c index 3924e5a05..10c99bd80 100644 --- a/src/backend/distributed/connection/placement_connection.c +++ b/src/backend/distributed/connection/placement_connection.c @@ -11,23 +11,24 @@ #include "postgres.h" +#include "access/hash.h" +#include "common/hashfn.h" +#include "utils/hsearch.h" +#include "utils/memutils.h" + #include "pg_version_constants.h" -#include "access/hash.h" #include "distributed/colocation_utils.h" #include "distributed/connection_management.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/distributed_planner.h" #include "distributed/hash_helpers.h" #include "distributed/listutils.h" -#include "distributed/coordinator_protocol.h" #include "distributed/metadata_cache.h" #include "distributed/multi_executor.h" -#include "distributed/distributed_planner.h" #include "distributed/multi_partitioning_utils.h" #include "distributed/placement_connection.h" #include "distributed/relation_access_tracking.h" -#include "utils/hsearch.h" -#include "common/hashfn.h" -#include "utils/memutils.h" /* diff --git a/src/backend/distributed/connection/remote_commands.c b/src/backend/distributed/connection/remote_commands.c index 15dd985ec..f694ff390 100644 --- a/src/backend/distributed/connection/remote_commands.c +++ b/src/backend/distributed/connection/remote_commands.c @@ -9,23 +9,23 @@ */ #include "postgres.h" -#include "pgstat.h" #include "libpq-fe.h" +#include "miscadmin.h" +#include "pgstat.h" +#include "lib/stringinfo.h" +#include "storage/latch.h" +#include "utils/builtins.h" +#include "utils/fmgrprotos.h" +#include "utils/palloc.h" + +#include "distributed/cancel_utils.h" #include "distributed/connection_management.h" #include "distributed/errormessage.h" #include "distributed/listutils.h" #include "distributed/log_utils.h" #include "distributed/remote_commands.h" -#include "distributed/errormessage.h" -#include "distributed/cancel_utils.h" -#include "lib/stringinfo.h" -#include "miscadmin.h" -#include "storage/latch.h" -#include "utils/builtins.h" -#include "utils/fmgrprotos.h" -#include "utils/palloc.h" /* diff --git a/src/backend/distributed/connection/shared_connection_stats.c b/src/backend/distributed/connection/shared_connection_stats.c index 104caed07..26598b465 100644 --- a/src/backend/distributed/connection/shared_connection_stats.c +++ b/src/backend/distributed/connection/shared_connection_stats.c @@ -11,18 +11,21 @@ */ #include "postgres.h" -#include "pgstat.h" - -#include "pg_version_constants.h" #include "libpq-fe.h" - #include "miscadmin.h" +#include "pgstat.h" #include "access/hash.h" #include "access/htup_details.h" #include "catalog/pg_authid.h" #include "commands/dbcommands.h" +#include "common/hashfn.h" +#include "storage/ipc.h" +#include "utils/builtins.h" + +#include "pg_version_constants.h" + #include "distributed/backend_data.h" #include "distributed/cancel_utils.h" #include "distributed/connection_management.h" @@ -32,12 +35,9 @@ #include "distributed/multi_executor.h" #include "distributed/placement_connection.h" #include "distributed/shared_connection_stats.h" -#include "distributed/worker_manager.h" #include "distributed/time_constants.h" #include "distributed/tuplestore.h" -#include "utils/builtins.h" -#include "common/hashfn.h" -#include "storage/ipc.h" +#include "distributed/worker_manager.h" #define REMOTE_CONNECTION_STATS_COLUMNS 4 diff --git a/src/backend/distributed/connection/worker_log_messages.c b/src/backend/distributed/connection/worker_log_messages.c index 9c240620e..9b64b81a6 100644 --- a/src/backend/distributed/connection/worker_log_messages.c +++ b/src/backend/distributed/connection/worker_log_messages.c @@ -10,12 +10,13 @@ #include "postgres.h" +#include "utils/elog.h" + #include "distributed/connection_management.h" #include "distributed/error_codes.h" #include "distributed/errormessage.h" #include "distributed/log_utils.h" #include "distributed/worker_log_messages.h" -#include "utils/elog.h" /* diff --git a/src/backend/distributed/deparser/citus_deparseutils.c b/src/backend/distributed/deparser/citus_deparseutils.c index c0de4ae7c..061263f6e 100644 --- a/src/backend/distributed/deparser/citus_deparseutils.c +++ b/src/backend/distributed/deparser/citus_deparseutils.c @@ -10,12 +10,9 @@ *------------------------------------------------------------------------- */ -#include "pg_version_constants.h" - #include "postgres.h" #include "commands/defrem.h" -#include "distributed/deparser.h" #include "utils/builtins.h" #include "utils/elog.h" #include "utils/rel.h" @@ -23,6 +20,10 @@ #include "utils/syscache.h" #include "utils/typcache.h" +#include "pg_version_constants.h" + +#include "distributed/deparser.h" + /** * DefElemOptionToStatement converts a DefElem option to a SQL statement and diff --git a/src/backend/distributed/deparser/citus_grantutils.c b/src/backend/distributed/deparser/citus_grantutils.c index 8e0dadff2..c944013f6 100644 --- a/src/backend/distributed/deparser/citus_grantutils.c +++ b/src/backend/distributed/deparser/citus_grantutils.c @@ -1,8 +1,10 @@ #include "postgres.h" + #include "lib/stringinfo.h" #include "nodes/parsenodes.h" -#include "distributed/deparser.h" + #include "distributed/citus_ruleutils.h" +#include "distributed/deparser.h" /* * Append the 'WITH GRANT OPTION' clause to the given buffer if the given diff --git a/src/backend/distributed/deparser/citus_ruleutils.c b/src/backend/distributed/deparser/citus_ruleutils.c index 1456f2fb5..f99462058 100644 --- a/src/backend/distributed/deparser/citus_ruleutils.c +++ b/src/backend/distributed/deparser/citus_ruleutils.c @@ -7,13 +7,12 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" -#include "miscadmin.h" - -#include "pg_version_constants.h" - #include +#include "postgres.h" + +#include "miscadmin.h" + #include "access/attnum.h" #include "access/genam.h" #include "access/heapam.h" @@ -39,21 +38,11 @@ #include "catalog/pg_type.h" #include "commands/defrem.h" #include "commands/extension.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/commands.h" -#include "distributed/listutils.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata_sync.h" -#include "distributed/metadata_utility.h" -#include "distributed/namespace_utils.h" -#include "distributed/relay_utility.h" -#include "distributed/version_compat.h" -#include "distributed/worker_protocol.h" +#include "commands/sequence.h" #include "foreign/foreign.h" #include "lib/stringinfo.h" -#include "nodes/nodes.h" #include "nodes/nodeFuncs.h" +#include "nodes/nodes.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "parser/parse_utilcmd.h" @@ -71,7 +60,20 @@ #include "utils/relcache.h" #include "utils/ruleutils.h" #include "utils/syscache.h" -#include "commands/sequence.h" + +#include "pg_version_constants.h" + +#include "distributed/citus_ruleutils.h" +#include "distributed/commands.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/namespace_utils.h" +#include "distributed/relay_utility.h" +#include "distributed/version_compat.h" +#include "distributed/worker_protocol.h" static void deparse_index_columns(StringInfo buffer, List *indexParameterList, diff --git a/src/backend/distributed/deparser/citus_setutils.c b/src/backend/distributed/deparser/citus_setutils.c index 481a2860b..c113a47d5 100644 --- a/src/backend/distributed/deparser/citus_setutils.c +++ b/src/backend/distributed/deparser/citus_setutils.c @@ -1,18 +1,18 @@ #include "postgres.h" +#include "catalog/namespace.h" +#include "commands/defrem.h" +#include "lib/stringinfo.h" +#include "nodes/parsenodes.h" +#include "nodes/print.h" +#include "parser/parse_type.h" +#include "utils/builtins.h" + #include "pg_version_compat.h" -#include "catalog/namespace.h" -#include "lib/stringinfo.h" -#include "nodes/parsenodes.h" -#include "utils/builtins.h" - -#include "distributed/deparser.h" #include "distributed/citus_ruleutils.h" -#include "commands/defrem.h" +#include "distributed/deparser.h" #include "distributed/log_utils.h" -#include "parser/parse_type.h" -#include "nodes/print.h" void AppendVarSetValue(StringInfo buf, VariableSetStmt *setStmt); diff --git a/src/backend/distributed/deparser/deparse_collation_stmts.c b/src/backend/distributed/deparser/deparse_collation_stmts.c index 44f7f9098..3a568d2ad 100644 --- a/src/backend/distributed/deparser/deparse_collation_stmts.c +++ b/src/backend/distributed/deparser/deparse_collation_stmts.c @@ -17,8 +17,8 @@ #include "nodes/value.h" #include "utils/builtins.h" -#include "distributed/deparser.h" #include "distributed/citus_ruleutils.h" +#include "distributed/deparser.h" static void AppendDropCollationStmt(StringInfo buf, DropStmt *stmt); static void AppendRenameCollationStmt(StringInfo buf, RenameStmt *stmt); diff --git a/src/backend/distributed/deparser/deparse_database_stmts.c b/src/backend/distributed/deparser/deparse_database_stmts.c index 1ae45f920..3614ba797 100644 --- a/src/backend/distributed/deparser/deparse_database_stmts.c +++ b/src/backend/distributed/deparser/deparse_database_stmts.c @@ -11,7 +11,6 @@ #include "postgres.h" -#include "pg_version_compat.h" #include "catalog/namespace.h" #include "commands/defrem.h" #include "lib/stringinfo.h" @@ -19,9 +18,10 @@ #include "parser/parse_type.h" #include "utils/builtins.h" -#include "distributed/deparser.h" -#include "distributed/commands.h" +#include "pg_version_compat.h" + #include "distributed/citus_ruleutils.h" +#include "distributed/commands.h" #include "distributed/deparser.h" #include "distributed/listutils.h" #include "distributed/log_utils.h" diff --git a/src/backend/distributed/deparser/deparse_extension_stmts.c b/src/backend/distributed/deparser/deparse_extension_stmts.c index bb6b15dbd..92d54602f 100644 --- a/src/backend/distributed/deparser/deparse_extension_stmts.c +++ b/src/backend/distributed/deparser/deparse_extension_stmts.c @@ -14,13 +14,14 @@ #include "catalog/namespace.h" #include "commands/defrem.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" #include "lib/stringinfo.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "utils/builtins.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" + /* Local functions forward declarations for helper functions */ static void AppendCreateExtensionStmt(StringInfo buf, CreateExtensionStmt *stmt); static void AppendCreateExtensionStmtOptions(StringInfo buf, List *options); diff --git a/src/backend/distributed/deparser/deparse_foreign_data_wrapper_stmts.c b/src/backend/distributed/deparser/deparse_foreign_data_wrapper_stmts.c index 3f755c905..fab1cc7ab 100644 --- a/src/backend/distributed/deparser/deparse_foreign_data_wrapper_stmts.c +++ b/src/backend/distributed/deparser/deparse_foreign_data_wrapper_stmts.c @@ -10,13 +10,14 @@ #include "postgres.h" #include "commands/defrem.h" +#include "lib/stringinfo.h" +#include "nodes/nodes.h" +#include "utils/builtins.h" + #include "distributed/citus_ruleutils.h" #include "distributed/deparser.h" #include "distributed/listutils.h" #include "distributed/relay_utility.h" -#include "lib/stringinfo.h" -#include "nodes/nodes.h" -#include "utils/builtins.h" static void AppendGrantOnFDWStmt(StringInfo buf, GrantStmt *stmt); static void AppendGrantOnFDWNames(StringInfo buf, GrantStmt *stmt); diff --git a/src/backend/distributed/deparser/deparse_foreign_server_stmts.c b/src/backend/distributed/deparser/deparse_foreign_server_stmts.c index 403569b94..9c708a771 100644 --- a/src/backend/distributed/deparser/deparse_foreign_server_stmts.c +++ b/src/backend/distributed/deparser/deparse_foreign_server_stmts.c @@ -10,13 +10,14 @@ #include "postgres.h" #include "commands/defrem.h" +#include "lib/stringinfo.h" +#include "nodes/nodes.h" +#include "utils/builtins.h" + #include "distributed/citus_ruleutils.h" #include "distributed/deparser.h" #include "distributed/listutils.h" #include "distributed/relay_utility.h" -#include "lib/stringinfo.h" -#include "nodes/nodes.h" -#include "utils/builtins.h" static void AppendCreateForeignServerStmt(StringInfo buf, CreateForeignServerStmt *stmt); static void AppendAlterForeignServerStmt(StringInfo buf, AlterForeignServerStmt *stmt); diff --git a/src/backend/distributed/deparser/deparse_function_stmts.c b/src/backend/distributed/deparser/deparse_function_stmts.c index a5bc52e5a..1e3e4a651 100644 --- a/src/backend/distributed/deparser/deparse_function_stmts.c +++ b/src/backend/distributed/deparser/deparse_function_stmts.c @@ -22,10 +22,6 @@ #include "catalog/pg_proc.h" #include "catalog/pg_type.h" #include "commands/defrem.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/commands.h" -#include "distributed/deparser.h" -#include "distributed/version_compat.h" #include "lib/stringinfo.h" #include "nodes/makefuncs.h" #include "nodes/nodes.h" @@ -38,8 +34,13 @@ #include "utils/guc.h" #include "utils/lsyscache.h" #include "utils/memutils.h" -#include "utils/syscache.h" #include "utils/regproc.h" +#include "utils/syscache.h" + +#include "distributed/citus_ruleutils.h" +#include "distributed/commands.h" +#include "distributed/deparser.h" +#include "distributed/version_compat.h" /* forward declaration for deparse functions */ diff --git a/src/backend/distributed/deparser/deparse_owned_stmts.c b/src/backend/distributed/deparser/deparse_owned_stmts.c index 888071165..af7fa0968 100644 --- a/src/backend/distributed/deparser/deparse_owned_stmts.c +++ b/src/backend/distributed/deparser/deparse_owned_stmts.c @@ -11,13 +11,14 @@ #include "postgres.h" +#include "lib/stringinfo.h" +#include "nodes/parsenodes.h" +#include "utils/builtins.h" + #include "pg_version_compat.h" #include "distributed/citus_ruleutils.h" #include "distributed/deparser.h" -#include "lib/stringinfo.h" -#include "nodes/parsenodes.h" -#include "utils/builtins.h" static void AppendDropOwnedStmt(StringInfo buf, DropOwnedStmt *stmt); static void AppendRoleList(StringInfo buf, List *roleList); diff --git a/src/backend/distributed/deparser/deparse_publication_stmts.c b/src/backend/distributed/deparser/deparse_publication_stmts.c index e22333146..8e3118171 100644 --- a/src/backend/distributed/deparser/deparse_publication_stmts.c +++ b/src/backend/distributed/deparser/deparse_publication_stmts.c @@ -13,20 +13,21 @@ #include "access/relation.h" #include "catalog/namespace.h" #include "commands/defrem.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" -#include "distributed/namespace_utils.h" #include "lib/stringinfo.h" +#include "nodes/value.h" #include "parser/parse_clause.h" #include "parser/parse_collate.h" #include "parser/parse_node.h" #include "parser/parse_relation.h" -#include "nodes/value.h" #include "utils/builtins.h" #include "utils/lsyscache.h" #include "utils/ruleutils.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" +#include "distributed/namespace_utils.h" + static void AppendCreatePublicationStmt(StringInfo buf, CreatePublicationStmt *stmt, bool whereClauseNeedsTransform, diff --git a/src/backend/distributed/deparser/deparse_role_stmts.c b/src/backend/distributed/deparser/deparse_role_stmts.c index ee216809e..4bbb2e438 100644 --- a/src/backend/distributed/deparser/deparse_role_stmts.c +++ b/src/backend/distributed/deparser/deparse_role_stmts.c @@ -13,16 +13,17 @@ #include "postgres.h" -#include "pg_version_compat.h" - #include "commands/defrem.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" #include "lib/stringinfo.h" #include "nodes/parsenodes.h" #include "utils/builtins.h" +#include "pg_version_compat.h" + +#include "distributed/citus_ruleutils.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" + static void AppendAlterRoleStmt(StringInfo buf, AlterRoleStmt *stmt); static void AppendAlterRoleSetStmt(StringInfo buf, AlterRoleSetStmt *stmt); static void AppendCreateRoleStmt(StringInfo buf, CreateRoleStmt *stmt); diff --git a/src/backend/distributed/deparser/deparse_schema_stmts.c b/src/backend/distributed/deparser/deparse_schema_stmts.c index 10317b899..0a9c49801 100644 --- a/src/backend/distributed/deparser/deparse_schema_stmts.c +++ b/src/backend/distributed/deparser/deparse_schema_stmts.c @@ -12,13 +12,14 @@ */ #include "postgres.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" #include "lib/stringinfo.h" #include "nodes/nodes.h" #include "utils/builtins.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" + static void AppendCreateSchemaStmt(StringInfo buf, CreateSchemaStmt *stmt); static void AppendDropSchemaStmt(StringInfo buf, DropStmt *stmt); static void AppendGrantOnSchemaStmt(StringInfo buf, GrantStmt *stmt); diff --git a/src/backend/distributed/deparser/deparse_seclabel_stmts.c b/src/backend/distributed/deparser/deparse_seclabel_stmts.c index a1aa047cc..ffe775b76 100644 --- a/src/backend/distributed/deparser/deparse_seclabel_stmts.c +++ b/src/backend/distributed/deparser/deparse_seclabel_stmts.c @@ -10,10 +10,11 @@ #include "postgres.h" -#include "distributed/deparser.h" #include "nodes/parsenodes.h" #include "utils/builtins.h" +#include "distributed/deparser.h" + static void AppendSecLabelStmt(StringInfo buf, SecLabelStmt *stmt); /* diff --git a/src/backend/distributed/deparser/deparse_sequence_stmts.c b/src/backend/distributed/deparser/deparse_sequence_stmts.c index 98488c160..9e5fab2c8 100644 --- a/src/backend/distributed/deparser/deparse_sequence_stmts.c +++ b/src/backend/distributed/deparser/deparse_sequence_stmts.c @@ -14,12 +14,13 @@ #include "postgres.h" #include "catalog/namespace.h" -#include "distributed/deparser.h" -#include "distributed/version_compat.h" #include "utils/acl.h" #include "utils/builtins.h" #include "utils/lsyscache.h" +#include "distributed/deparser.h" +#include "distributed/version_compat.h" + /* forward declaration for deparse functions */ static void AppendDropSequenceStmt(StringInfo buf, DropStmt *stmt); diff --git a/src/backend/distributed/deparser/deparse_statistics_stmts.c b/src/backend/distributed/deparser/deparse_statistics_stmts.c index 599738dc5..99b9d1c2d 100644 --- a/src/backend/distributed/deparser/deparse_statistics_stmts.c +++ b/src/backend/distributed/deparser/deparse_statistics_stmts.c @@ -12,16 +12,17 @@ */ #include "postgres.h" +#include "catalog/namespace.h" +#include "lib/stringinfo.h" +#include "nodes/nodes.h" +#include "utils/builtins.h" + #include "pg_version_constants.h" -#include "catalog/namespace.h" #include "distributed/citus_ruleutils.h" #include "distributed/deparser.h" #include "distributed/listutils.h" #include "distributed/relay_utility.h" -#include "lib/stringinfo.h" -#include "nodes/nodes.h" -#include "utils/builtins.h" static void AppendCreateStatisticsStmt(StringInfo buf, CreateStatsStmt *stmt); static void AppendDropStatisticsStmt(StringInfo buf, List *nameList, bool ifExists); diff --git a/src/backend/distributed/deparser/deparse_table_stmts.c b/src/backend/distributed/deparser/deparse_table_stmts.c index ff96d7fc3..e976b0e2f 100644 --- a/src/backend/distributed/deparser/deparse_table_stmts.c +++ b/src/backend/distributed/deparser/deparse_table_stmts.c @@ -13,20 +13,20 @@ #include "catalog/heap.h" #include "commands/defrem.h" -#include "distributed/commands.h" -#include "distributed/deparser.h" -#include "distributed/version_compat.h" +#include "commands/tablecmds.h" #include "nodes/nodes.h" #include "nodes/parsenodes.h" #include "parser/parse_expr.h" -#include "parser/parse_type.h" #include "parser/parse_relation.h" +#include "parser/parse_type.h" #include "utils/builtins.h" #include "utils/lsyscache.h" #include "utils/ruleutils.h" +#include "distributed/commands.h" +#include "distributed/deparser.h" #include "distributed/namespace_utils.h" -#include "commands/tablecmds.h" +#include "distributed/version_compat.h" static void AppendAlterTableSchemaStmt(StringInfo buf, AlterObjectSchemaStmt *stmt); static void AppendAlterTableStmt(StringInfo buf, AlterTableStmt *stmt); diff --git a/src/backend/distributed/deparser/deparse_view_stmts.c b/src/backend/distributed/deparser/deparse_view_stmts.c index 39c4ccb63..5592aec9d 100644 --- a/src/backend/distributed/deparser/deparse_view_stmts.c +++ b/src/backend/distributed/deparser/deparse_view_stmts.c @@ -13,15 +13,16 @@ #include "catalog/namespace.h" #include "commands/defrem.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/commands.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" #include "lib/stringinfo.h" #include "nodes/parsenodes.h" #include "utils/builtins.h" #include "utils/lsyscache.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/commands.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" + static void AppendDropViewStmt(StringInfo buf, DropStmt *stmt); static void AppendViewNameList(StringInfo buf, List *objects); static void AppendAlterViewStmt(StringInfo buf, AlterTableStmt *stmt); diff --git a/src/backend/distributed/deparser/objectaddress.c b/src/backend/distributed/deparser/objectaddress.c index d835a3b1a..6718c22cf 100644 --- a/src/backend/distributed/deparser/objectaddress.c +++ b/src/backend/distributed/deparser/objectaddress.c @@ -12,11 +12,12 @@ #include "postgres.h" -#include "commands/extension.h" -#include "distributed/commands.h" -#include "distributed/deparser.h" #include "catalog/objectaddress.h" #include "catalog/pg_extension_d.h" +#include "commands/extension.h" + +#include "distributed/commands.h" +#include "distributed/deparser.h" /* diff --git a/src/backend/distributed/deparser/qualify_aggregate_stmts.c b/src/backend/distributed/deparser/qualify_aggregate_stmts.c index 9debc244a..e5d7210f3 100644 --- a/src/backend/distributed/deparser/qualify_aggregate_stmts.c +++ b/src/backend/distributed/deparser/qualify_aggregate_stmts.c @@ -15,10 +15,11 @@ #include "postgres.h" #include "catalog/namespace.h" -#include "distributed/deparser.h" #include "nodes/makefuncs.h" #include "utils/lsyscache.h" +#include "distributed/deparser.h" + void QualifyDefineAggregateStmt(Node *node) { diff --git a/src/backend/distributed/deparser/qualify_function_stmt.c b/src/backend/distributed/deparser/qualify_function_stmt.c index fbd6c17a0..184ff92bf 100644 --- a/src/backend/distributed/deparser/qualify_function_stmt.c +++ b/src/backend/distributed/deparser/qualify_function_stmt.c @@ -21,12 +21,13 @@ #include "access/htup_details.h" #include "catalog/namespace.h" #include "catalog/pg_proc.h" -#include "distributed/deparser.h" -#include "distributed/version_compat.h" #include "parser/parse_func.h" #include "utils/lsyscache.h" #include "utils/syscache.h" +#include "distributed/deparser.h" +#include "distributed/version_compat.h" + /* forward declaration for qualify functions */ static void QualifyFunction(ObjectWithArgs *func, ObjectType type); static void QualifyFunctionSchemaName(ObjectWithArgs *func, ObjectType type); diff --git a/src/backend/distributed/deparser/qualify_publication_stmt.c b/src/backend/distributed/deparser/qualify_publication_stmt.c index 3231fe363..73ffe3a35 100644 --- a/src/backend/distributed/deparser/qualify_publication_stmt.c +++ b/src/backend/distributed/deparser/qualify_publication_stmt.c @@ -12,12 +12,13 @@ #include "postgres.h" #include "catalog/namespace.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" #include "nodes/nodes.h" #include "utils/guc.h" #include "utils/lsyscache.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" + #if (PG_VERSION_NUM >= PG_VERSION_15) static void QualifyPublicationObjects(List *publicationObjects); #else diff --git a/src/backend/distributed/deparser/qualify_role_stmt.c b/src/backend/distributed/deparser/qualify_role_stmt.c index 93a958ea9..cffb7ac4c 100644 --- a/src/backend/distributed/deparser/qualify_role_stmt.c +++ b/src/backend/distributed/deparser/qualify_role_stmt.c @@ -17,10 +17,11 @@ #include "postgres.h" -#include "distributed/deparser.h" #include "nodes/nodes.h" #include "utils/guc.h" +#include "distributed/deparser.h" + static void QualifyVarSetCurrent(VariableSetStmt *setStmt); diff --git a/src/backend/distributed/deparser/qualify_sequence_stmt.c b/src/backend/distributed/deparser/qualify_sequence_stmt.c index 384e0c953..1a0ecc831 100644 --- a/src/backend/distributed/deparser/qualify_sequence_stmt.c +++ b/src/backend/distributed/deparser/qualify_sequence_stmt.c @@ -17,12 +17,13 @@ #include "postgres.h" +#include "parser/parse_func.h" +#include "utils/lsyscache.h" + #include "distributed/commands.h" #include "distributed/deparser.h" #include "distributed/listutils.h" #include "distributed/version_compat.h" -#include "parser/parse_func.h" -#include "utils/lsyscache.h" /* diff --git a/src/backend/distributed/deparser/qualify_statistics_stmt.c b/src/backend/distributed/deparser/qualify_statistics_stmt.c index ce9443930..ba8e8a764 100644 --- a/src/backend/distributed/deparser/qualify_statistics_stmt.c +++ b/src/backend/distributed/deparser/qualify_statistics_stmt.c @@ -16,15 +16,16 @@ #include "catalog/namespace.h" #include "catalog/pg_statistic_ext.h" -#include "distributed/commands.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" #include "nodes/parsenodes.h" #include "nodes/value.h" -#include "utils/syscache.h" #include "utils/lsyscache.h" #include "utils/rel.h" #include "utils/relcache.h" +#include "utils/syscache.h" + +#include "distributed/commands.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" static Oid GetStatsNamespaceOid(Oid statsOid); diff --git a/src/backend/distributed/deparser/qualify_table_stmt.c b/src/backend/distributed/deparser/qualify_table_stmt.c index 9667c4c79..e760ff388 100644 --- a/src/backend/distributed/deparser/qualify_table_stmt.c +++ b/src/backend/distributed/deparser/qualify_table_stmt.c @@ -23,6 +23,7 @@ #include "utils/lsyscache.h" #include "utils/rel.h" #include "utils/relcache.h" + #include "distributed/deparser.h" void diff --git a/src/backend/distributed/deparser/qualify_type_stmt.c b/src/backend/distributed/deparser/qualify_type_stmt.c index 487e6fc97..91052b576 100644 --- a/src/backend/distributed/deparser/qualify_type_stmt.c +++ b/src/backend/distributed/deparser/qualify_type_stmt.c @@ -23,13 +23,14 @@ #include "catalog/namespace.h" #include "catalog/objectaddress.h" #include "catalog/pg_type.h" +#include "nodes/makefuncs.h" +#include "parser/parse_type.h" +#include "utils/lsyscache.h" +#include "utils/syscache.h" + #include "distributed/commands.h" #include "distributed/deparser.h" #include "distributed/version_compat.h" -#include "nodes/makefuncs.h" -#include "parser/parse_type.h" -#include "utils/syscache.h" -#include "utils/lsyscache.h" /* * GetTypeNamespaceNameByNameList resolved the schema name of a type by its namelist. diff --git a/src/backend/distributed/deparser/qualify_view_stmt.c b/src/backend/distributed/deparser/qualify_view_stmt.c index 1f450d50a..af3fb280a 100644 --- a/src/backend/distributed/deparser/qualify_view_stmt.c +++ b/src/backend/distributed/deparser/qualify_view_stmt.c @@ -12,12 +12,13 @@ #include "postgres.h" #include "catalog/namespace.h" -#include "distributed/deparser.h" -#include "distributed/listutils.h" #include "nodes/nodes.h" #include "utils/guc.h" #include "utils/lsyscache.h" +#include "distributed/deparser.h" +#include "distributed/listutils.h" + static void QualifyViewRangeVar(RangeVar *view); /* diff --git a/src/backend/distributed/executor/adaptive_executor.c b/src/backend/distributed/executor/adaptive_executor.c index 61a52e7c4..b5566985a 100644 --- a/src/backend/distributed/executor/adaptive_executor.c +++ b/src/backend/distributed/executor/adaptive_executor.c @@ -118,32 +118,43 @@ *------------------------------------------------------------------------- */ +#include +#include +#include + #include "postgres.h" + #include "funcapi.h" #include "libpq-fe.h" #include "miscadmin.h" #include "pgstat.h" -#include -#include -#include - +#include "access/htup_details.h" #include "access/transam.h" #include "access/xact.h" -#include "access/htup_details.h" #include "catalog/pg_type.h" #include "commands/dbcommands.h" #include "commands/schemacmds.h" +#include "lib/ilist.h" +#include "portability/instr_time.h" +#include "storage/fd.h" +#include "storage/latch.h" +#include "utils/builtins.h" +#include "utils/lsyscache.h" +#include "utils/memutils.h" +#include "utils/syscache.h" +#include "utils/timestamp.h" + #include "distributed/adaptive_executor.h" +#include "distributed/backend_data.h" #include "distributed/cancel_utils.h" #include "distributed/citus_custom_scan.h" #include "distributed/citus_safe_lib.h" -#include "distributed/connection_management.h" #include "distributed/commands/multi_copy.h" +#include "distributed/connection_management.h" #include "distributed/deparse_shard_query.h" -#include "distributed/executor_util.h" -#include "distributed/shared_connection_stats.h" #include "distributed/distributed_execution_locks.h" +#include "distributed/executor_util.h" #include "distributed/intermediate_result_pruning.h" #include "distributed/listutils.h" #include "distributed/local_executor.h" @@ -161,21 +172,11 @@ #include "distributed/resource_lock.h" #include "distributed/shared_connection_stats.h" #include "distributed/subplan_execution.h" -#include "distributed/transaction_management.h" #include "distributed/transaction_identifier.h" +#include "distributed/transaction_management.h" #include "distributed/tuple_destination.h" #include "distributed/version_compat.h" #include "distributed/worker_protocol.h" -#include "distributed/backend_data.h" -#include "lib/ilist.h" -#include "portability/instr_time.h" -#include "storage/fd.h" -#include "storage/latch.h" -#include "utils/builtins.h" -#include "utils/lsyscache.h" -#include "utils/memutils.h" -#include "utils/syscache.h" -#include "utils/timestamp.h" #define SLOW_START_DISABLED 0 diff --git a/src/backend/distributed/executor/citus_custom_scan.c b/src/backend/distributed/executor/citus_custom_scan.c index 3403e27ca..34a2f3d90 100644 --- a/src/backend/distributed/executor/citus_custom_scan.c +++ b/src/backend/distributed/executor/citus_custom_scan.c @@ -9,19 +9,30 @@ */ #include "postgres.h" -#include "pg_version_constants.h" - #include "miscadmin.h" #include "commands/copy.h" +#include "executor/executor.h" +#include "nodes/makefuncs.h" +#include "optimizer/clauses.h" +#include "optimizer/optimizer.h" +#include "utils/datum.h" +#include "utils/lsyscache.h" +#include "utils/memutils.h" +#include "utils/rel.h" + +#include "pg_version_constants.h" + #include "distributed/backend_data.h" #include "distributed/citus_clauses.h" #include "distributed/citus_custom_scan.h" #include "distributed/citus_nodefuncs.h" #include "distributed/citus_ruleutils.h" +#include "distributed/colocation_utils.h" #include "distributed/connection_management.h" #include "distributed/deparse_shard_query.h" #include "distributed/distributed_execution_locks.h" +#include "distributed/function_call_delegation.h" #include "distributed/insert_select_executor.h" #include "distributed/insert_select_planner.h" #include "distributed/listutils.h" @@ -30,23 +41,13 @@ #include "distributed/merge_executor.h" #include "distributed/merge_planner.h" #include "distributed/multi_executor.h" -#include "distributed/multi_server_executor.h" #include "distributed/multi_router_planner.h" +#include "distributed/multi_server_executor.h" #include "distributed/query_stats.h" #include "distributed/shard_utils.h" #include "distributed/subplan_execution.h" #include "distributed/worker_log_messages.h" #include "distributed/worker_protocol.h" -#include "distributed/colocation_utils.h" -#include "distributed/function_call_delegation.h" -#include "executor/executor.h" -#include "nodes/makefuncs.h" -#include "optimizer/optimizer.h" -#include "optimizer/clauses.h" -#include "utils/lsyscache.h" -#include "utils/memutils.h" -#include "utils/rel.h" -#include "utils/datum.h" extern AllowedDistributionColumn AllowedDistributionColumnValue; diff --git a/src/backend/distributed/executor/directed_acyclic_graph_execution.c b/src/backend/distributed/executor/directed_acyclic_graph_execution.c index e0d4c9b81..15b0272dd 100644 --- a/src/backend/distributed/executor/directed_acyclic_graph_execution.c +++ b/src/backend/distributed/executor/directed_acyclic_graph_execution.c @@ -8,11 +8,12 @@ */ #include "postgres.h" + #include "access/hash.h" -#include "distributed/hash_helpers.h" #include "distributed/adaptive_executor.h" #include "distributed/directed_acyclic_graph_execution.h" +#include "distributed/hash_helpers.h" #include "distributed/listutils.h" #include "distributed/metadata_cache.h" #include "distributed/multi_physical_planner.h" diff --git a/src/backend/distributed/executor/distributed_execution_locks.c b/src/backend/distributed/executor/distributed_execution_locks.c index f7d2fd49d..4424accb7 100644 --- a/src/backend/distributed/executor/distributed_execution_locks.c +++ b/src/backend/distributed/executor/distributed_execution_locks.c @@ -8,10 +8,10 @@ * Copyright (c) Citus Data, Inc. *------------------------------------------------------------------------- */ +#include "distributed/coordinator_protocol.h" #include "distributed/distributed_execution_locks.h" #include "distributed/executor_util.h" #include "distributed/listutils.h" -#include "distributed/coordinator_protocol.h" #include "distributed/metadata_cache.h" #include "distributed/multi_executor.h" #include "distributed/multi_partitioning_utils.h" diff --git a/src/backend/distributed/executor/distributed_intermediate_results.c b/src/backend/distributed/executor/distributed_intermediate_results.c index cc351a1fc..c5ac27fb6 100644 --- a/src/backend/distributed/executor/distributed_intermediate_results.c +++ b/src/backend/distributed/executor/distributed_intermediate_results.c @@ -8,12 +8,11 @@ *------------------------------------------------------------------------- */ -#include "pg_version_constants.h" - #include #include #include "postgres.h" + #include "funcapi.h" #include "miscadmin.h" #include "port.h" @@ -21,21 +20,24 @@ #include "access/htup_details.h" #include "access/tupdesc.h" #include "catalog/pg_type.h" +#include "tcop/pquery.h" +#include "tcop/tcopprot.h" +#include "utils/builtins.h" +#include "utils/lsyscache.h" + +#include "pg_version_constants.h" + #include "distributed/deparse_shard_query.h" #include "distributed/intermediate_results.h" #include "distributed/listutils.h" -#include "distributed/metadata_utility.h" #include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" #include "distributed/multi_executor.h" #include "distributed/multi_physical_planner.h" #include "distributed/transaction_management.h" #include "distributed/tuple_destination.h" #include "distributed/tuplestore.h" #include "distributed/worker_protocol.h" -#include "tcop/pquery.h" -#include "tcop/tcopprot.h" -#include "utils/builtins.h" -#include "utils/lsyscache.h" /* diff --git a/src/backend/distributed/executor/executor_util_params.c b/src/backend/distributed/executor/executor_util_params.c index 6b5139bff..975654f22 100644 --- a/src/backend/distributed/executor/executor_util_params.c +++ b/src/backend/distributed/executor/executor_util_params.c @@ -8,12 +8,14 @@ */ #include "postgres.h" + #include "funcapi.h" #include "miscadmin.h" -#include "distributed/executor_util.h" #include "utils/lsyscache.h" +#include "distributed/executor_util.h" + /* * ExtractParametersForRemoteExecution extracts parameter types and values from diff --git a/src/backend/distributed/executor/executor_util_tasks.c b/src/backend/distributed/executor/executor_util_tasks.c index 483fd55a7..6a3eec8fc 100644 --- a/src/backend/distributed/executor/executor_util_tasks.c +++ b/src/backend/distributed/executor/executor_util_tasks.c @@ -8,6 +8,7 @@ */ #include "postgres.h" + #include "funcapi.h" #include "miscadmin.h" diff --git a/src/backend/distributed/executor/executor_util_tuples.c b/src/backend/distributed/executor/executor_util_tuples.c index c5fde9f90..68f699956 100644 --- a/src/backend/distributed/executor/executor_util_tuples.c +++ b/src/backend/distributed/executor/executor_util_tuples.c @@ -8,12 +8,14 @@ */ #include "postgres.h" + #include "funcapi.h" #include "miscadmin.h" -#include "distributed/executor_util.h" #include "utils/lsyscache.h" +#include "distributed/executor_util.h" + /* * TupleDescGetAttBinaryInMetadata - Build an AttInMetadata structure based on diff --git a/src/backend/distributed/executor/insert_select_executor.c b/src/backend/distributed/executor/insert_select_executor.c index 4a15289e6..f5fbb3f78 100644 --- a/src/backend/distributed/executor/insert_select_executor.c +++ b/src/backend/distributed/executor/insert_select_executor.c @@ -9,34 +9,9 @@ */ #include "postgres.h" + #include "miscadmin.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/commands/multi_copy.h" -#include "distributed/adaptive_executor.h" -#include "distributed/deparse_shard_query.h" -#include "distributed/distributed_execution_locks.h" -#include "distributed/insert_select_executor.h" -#include "distributed/insert_select_planner.h" -#include "distributed/intermediate_results.h" -#include "distributed/local_executor.h" -#include "distributed/merge_planner.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/listutils.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_router_planner.h" -#include "distributed/local_executor.h" -#include "distributed/distributed_planner.h" -#include "distributed/recursive_planning.h" -#include "distributed/relation_access_tracking.h" -#include "distributed/repartition_executor.h" -#include "distributed/resource_lock.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/subplan_execution.h" -#include "distributed/transaction_management.h" -#include "distributed/version_compat.h" #include "executor/executor.h" #include "nodes/execnodes.h" #include "nodes/makefuncs.h" @@ -53,6 +28,32 @@ #include "utils/rel.h" #include "utils/snapmgr.h" +#include "distributed/adaptive_executor.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/commands/multi_copy.h" +#include "distributed/deparse_shard_query.h" +#include "distributed/distributed_execution_locks.h" +#include "distributed/distributed_planner.h" +#include "distributed/insert_select_executor.h" +#include "distributed/insert_select_planner.h" +#include "distributed/intermediate_results.h" +#include "distributed/listutils.h" +#include "distributed/local_executor.h" +#include "distributed/merge_planner.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/multi_router_planner.h" +#include "distributed/recursive_planning.h" +#include "distributed/relation_access_tracking.h" +#include "distributed/repartition_executor.h" +#include "distributed/resource_lock.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/subplan_execution.h" +#include "distributed/transaction_management.h" +#include "distributed/version_compat.h" + /* Config variables managed via guc.c */ bool EnableRepartitionedInsertSelect = true; diff --git a/src/backend/distributed/executor/intermediate_results.c b/src/backend/distributed/executor/intermediate_results.c index d17e65217..0e18d4416 100644 --- a/src/backend/distributed/executor/intermediate_results.c +++ b/src/backend/distributed/executor/intermediate_results.c @@ -11,6 +11,7 @@ #include #include "postgres.h" + #include "funcapi.h" #include "libpq-fe.h" #include "miscadmin.h" @@ -19,22 +20,6 @@ #include "catalog/pg_enum.h" #include "catalog/pg_type.h" #include "commands/copy.h" -#include "distributed/commands/multi_copy.h" -#include "distributed/connection_management.h" -#include "distributed/error_codes.h" -#include "distributed/intermediate_results.h" -#include "distributed/listutils.h" -#include "distributed/metadata_utility.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_executor.h" -#include "distributed/remote_commands.h" -#include "distributed/transmit.h" -#include "distributed/transaction_identifier.h" -#include "distributed/tuplestore.h" -#include "distributed/utils/array_type.h" -#include "distributed/utils/directory.h" -#include "distributed/version_compat.h" -#include "distributed/worker_protocol.h" #include "nodes/makefuncs.h" #include "nodes/parsenodes.h" #include "nodes/primnodes.h" @@ -45,6 +30,23 @@ #include "utils/memutils.h" #include "utils/syscache.h" +#include "distributed/commands/multi_copy.h" +#include "distributed/connection_management.h" +#include "distributed/error_codes.h" +#include "distributed/intermediate_results.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_executor.h" +#include "distributed/remote_commands.h" +#include "distributed/transaction_identifier.h" +#include "distributed/transmit.h" +#include "distributed/tuplestore.h" +#include "distributed/utils/array_type.h" +#include "distributed/utils/directory.h" +#include "distributed/version_compat.h" +#include "distributed/worker_protocol.h" + static List *CreatedResultsDirectories = NIL; diff --git a/src/backend/distributed/executor/local_executor.c b/src/backend/distributed/executor/local_executor.c index 7168fd314..bedaa643e 100644 --- a/src/backend/distributed/executor/local_executor.c +++ b/src/backend/distributed/executor/local_executor.c @@ -76,36 +76,38 @@ * via coordinator cannot happen via the local execution. */ #include "postgres.h" + #include "miscadmin.h" +#include "executor/tstoreReceiver.h" +#include "executor/tuptable.h" +#include "nodes/params.h" +#include "optimizer/optimizer.h" +#include "utils/snapmgr.h" + #include "pg_version_constants.h" #include "distributed/adaptive_executor.h" -#include "distributed/commands/utility_hook.h" #include "distributed/citus_custom_scan.h" #include "distributed/citus_ruleutils.h" #include "distributed/colocation_utils.h" -#include "distributed/query_utils.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/coordinator_protocol.h" #include "distributed/deparse_shard_query.h" +#include "distributed/executor_util.h" #include "distributed/listutils.h" #include "distributed/local_executor.h" #include "distributed/local_plan_cache.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/executor_util.h" #include "distributed/metadata_cache.h" #include "distributed/multi_executor.h" #include "distributed/multi_server_executor.h" +#include "distributed/query_utils.h" #include "distributed/relation_access_tracking.h" #include "distributed/remote_commands.h" /* to access LogRemoteCommands */ #include "distributed/transaction_management.h" #include "distributed/utils/citus_stat_tenants.h" #include "distributed/version_compat.h" #include "distributed/worker_protocol.h" -#include "executor/tstoreReceiver.h" -#include "executor/tuptable.h" -#include "optimizer/optimizer.h" -#include "nodes/params.h" -#include "utils/snapmgr.h" /* controlled via a GUC */ bool EnableLocalExecution = true; diff --git a/src/backend/distributed/executor/merge_executor.c b/src/backend/distributed/executor/merge_executor.c index bcacbcd1e..969b03faf 100644 --- a/src/backend/distributed/executor/merge_executor.c +++ b/src/backend/distributed/executor/merge_executor.c @@ -9,8 +9,13 @@ */ #include "postgres.h" + #include "miscadmin.h" +#include "nodes/execnodes.h" +#include "nodes/makefuncs.h" +#include "nodes/nodeFuncs.h" + #include "distributed/distributed_execution_locks.h" #include "distributed/insert_select_executor.h" #include "distributed/intermediate_results.h" @@ -23,10 +28,6 @@ #include "distributed/repartition_executor.h" #include "distributed/subplan_execution.h" -#include "nodes/execnodes.h" -#include "nodes/makefuncs.h" -#include "nodes/nodeFuncs.h" - static void ExecuteSourceAtWorkerAndRepartition(CitusScanState *scanState); static void ExecuteSourceAtCoordAndRedistribution(CitusScanState *scanState); static HTAB * ExecuteMergeSourcePlanIntoColocatedIntermediateResults(Oid targetRelationId, diff --git a/src/backend/distributed/executor/multi_executor.c b/src/backend/distributed/executor/multi_executor.c index 306698251..45a791af4 100644 --- a/src/backend/distributed/executor/multi_executor.c +++ b/src/backend/distributed/executor/multi_executor.c @@ -10,50 +10,50 @@ #include "postgres.h" -#include "pg_version_constants.h" - #include "miscadmin.h" #include "access/xact.h" #include "catalog/dependency.h" -#include "catalog/pg_class.h" #include "catalog/namespace.h" +#include "catalog/pg_class.h" +#include "commands/copy.h" +#include "executor/execdebug.h" +#include "nodes/execnodes.h" +#include "nodes/makefuncs.h" +#include "nodes/nodeFuncs.h" +#include "parser/parse_oper.h" +#include "parser/parsetree.h" +#include "storage/lmgr.h" +#include "tcop/dest.h" +#include "tcop/pquery.h" +#include "tcop/utility.h" +#include "utils/fmgrprotos.h" +#include "utils/memutils.h" +#include "utils/snapmgr.h" + +#include "pg_version_constants.h" + #include "distributed/backend_data.h" #include "distributed/citus_custom_scan.h" +#include "distributed/combine_query_planner.h" #include "distributed/commands/multi_copy.h" #include "distributed/commands/utility_hook.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/distributed_planner.h" #include "distributed/function_call_delegation.h" #include "distributed/insert_select_executor.h" #include "distributed/insert_select_planner.h" #include "distributed/listutils.h" #include "distributed/local_executor.h" -#include "distributed/coordinator_protocol.h" #include "distributed/multi_executor.h" -#include "distributed/combine_query_planner.h" -#include "distributed/distributed_planner.h" #include "distributed/multi_router_planner.h" #include "distributed/multi_server_executor.h" #include "distributed/relation_access_tracking.h" #include "distributed/resource_lock.h" #include "distributed/transaction_management.h" #include "distributed/version_compat.h" -#include "distributed/worker_shard_visibility.h" #include "distributed/worker_protocol.h" -#include "distributed/function_call_delegation.h" -#include "executor/execdebug.h" -#include "commands/copy.h" -#include "nodes/execnodes.h" -#include "nodes/makefuncs.h" -#include "nodes/nodeFuncs.h" -#include "parser/parsetree.h" -#include "parser/parse_oper.h" -#include "storage/lmgr.h" -#include "tcop/dest.h" -#include "tcop/pquery.h" -#include "tcop/utility.h" -#include "utils/fmgrprotos.h" -#include "utils/snapmgr.h" -#include "utils/memutils.h" +#include "distributed/worker_shard_visibility.h" /* diff --git a/src/backend/distributed/executor/multi_server_executor.c b/src/backend/distributed/executor/multi_server_executor.c index ac144c350..209019833 100644 --- a/src/backend/distributed/executor/multi_server_executor.c +++ b/src/backend/distributed/executor/multi_server_executor.c @@ -14,22 +14,24 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" -#include "miscadmin.h" - #include +#include "postgres.h" + +#include "miscadmin.h" + +#include "utils/lsyscache.h" + +#include "distributed/coordinator_protocol.h" #include "distributed/listutils.h" #include "distributed/log_utils.h" #include "distributed/multi_executor.h" #include "distributed/multi_physical_planner.h" -#include "distributed/multi_server_executor.h" #include "distributed/multi_router_planner.h" -#include "distributed/coordinator_protocol.h" +#include "distributed/multi_server_executor.h" #include "distributed/subplan_execution.h" #include "distributed/tuple_destination.h" #include "distributed/worker_protocol.h" -#include "utils/lsyscache.h" int RemoteTaskCheckInterval = 10; /* per cycle sleep interval in millisecs */ int TaskExecutorType = MULTI_EXECUTOR_ADAPTIVE; /* distributed executor type */ diff --git a/src/backend/distributed/executor/partitioned_intermediate_results.c b/src/backend/distributed/executor/partitioned_intermediate_results.c index 752552343..3ec73a456 100644 --- a/src/backend/distributed/executor/partitioned_intermediate_results.c +++ b/src/backend/distributed/executor/partitioned_intermediate_results.c @@ -11,6 +11,7 @@ #include #include "postgres.h" + #include "funcapi.h" #include "libpq-fe.h" #include "miscadmin.h" @@ -20,9 +21,15 @@ #include "access/nbtree.h" #include "catalog/pg_am.h" #include "catalog/pg_type.h" +#include "nodes/makefuncs.h" +#include "nodes/primnodes.h" +#include "tcop/pquery.h" +#include "tcop/tcopprot.h" +#include "utils/typcache.h" + #include "distributed/intermediate_results.h" -#include "distributed/metadata_utility.h" #include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" #include "distributed/multi_executor.h" #include "distributed/pg_dist_shard.h" #include "distributed/remote_commands.h" @@ -31,11 +38,6 @@ #include "distributed/utils/function.h" #include "distributed/version_compat.h" #include "distributed/worker_protocol.h" -#include "nodes/makefuncs.h" -#include "nodes/primnodes.h" -#include "tcop/pquery.h" -#include "tcop/tcopprot.h" -#include "utils/typcache.h" /* diff --git a/src/backend/distributed/executor/placement_access.c b/src/backend/distributed/executor/placement_access.c index df5143a54..a8573de7c 100644 --- a/src/backend/distributed/executor/placement_access.c +++ b/src/backend/distributed/executor/placement_access.c @@ -8,9 +8,9 @@ * Copyright (c) Citus Data, Inc. *------------------------------------------------------------------------- */ -#include "distributed/placement_access.h" #include "distributed/listutils.h" #include "distributed/metadata_cache.h" +#include "distributed/placement_access.h" static List * BuildPlacementSelectList(int32 groupId, List *relationShardList); static List * BuildPlacementDDLList(int32 groupId, List *relationShardList); diff --git a/src/backend/distributed/executor/query_stats.c b/src/backend/distributed/executor/query_stats.c index b59777d45..f37a99bbf 100644 --- a/src/backend/distributed/executor/query_stats.c +++ b/src/backend/distributed/executor/query_stats.c @@ -9,32 +9,32 @@ *------------------------------------------------------------------------- */ +#include + #include "postgres.h" -#include "safe_lib.h" - +#include "funcapi.h" #include "miscadmin.h" - -#include "pg_version_constants.h" +#include "safe_lib.h" #include "access/hash.h" #include "catalog/pg_authid.h" +#include "storage/fd.h" +#include "storage/ipc.h" +#include "storage/spin.h" +#include "tcop/utility.h" +#include "utils/builtins.h" + +#include "pg_version_constants.h" + #include "distributed/citus_safe_lib.h" #include "distributed/function_utils.h" #include "distributed/hash_helpers.h" #include "distributed/multi_executor.h" #include "distributed/multi_server_executor.h" -#include "distributed/version_compat.h" #include "distributed/query_stats.h" #include "distributed/tuplestore.h" -#include "funcapi.h" -#include "storage/ipc.h" -#include "storage/fd.h" -#include "storage/spin.h" -#include "tcop/utility.h" -#include "utils/builtins.h" - -#include +#include "distributed/version_compat.h" #define CITUS_STATS_DUMP_FILE "pg_stat/citus_query_stats.stat" #define CITUS_STAT_STATEMENTS_COLS 6 diff --git a/src/backend/distributed/executor/repartition_executor.c b/src/backend/distributed/executor/repartition_executor.c index af4f0ac7e..6e4dd3df4 100644 --- a/src/backend/distributed/executor/repartition_executor.c +++ b/src/backend/distributed/executor/repartition_executor.c @@ -10,6 +10,7 @@ */ #include "postgres.h" + #include "miscadmin.h" #include "nodes/makefuncs.h" diff --git a/src/backend/distributed/executor/repartition_join_execution.c b/src/backend/distributed/executor/repartition_join_execution.c index 29d994e59..8dce12390 100644 --- a/src/backend/distributed/executor/repartition_join_execution.c +++ b/src/backend/distributed/executor/repartition_join_execution.c @@ -24,20 +24,22 @@ */ #include "postgres.h" -#include "access/hash.h" + #include "miscadmin.h" + +#include "access/hash.h" #include "utils/builtins.h" -#include "distributed/hash_helpers.h" #include "distributed/adaptive_executor.h" #include "distributed/directed_acyclic_graph_execution.h" +#include "distributed/hash_helpers.h" #include "distributed/listutils.h" #include "distributed/local_executor.h" #include "distributed/metadata_cache.h" #include "distributed/multi_physical_planner.h" #include "distributed/multi_server_executor.h" -#include "distributed/task_execution_utils.h" #include "distributed/repartition_join_execution.h" +#include "distributed/task_execution_utils.h" #include "distributed/transaction_management.h" #include "distributed/transmit.h" #include "distributed/worker_manager.h" diff --git a/src/backend/distributed/executor/subplan_execution.c b/src/backend/distributed/executor/subplan_execution.c index 3651d7f52..4e81bb486 100644 --- a/src/backend/distributed/executor/subplan_execution.c +++ b/src/backend/distributed/executor/subplan_execution.c @@ -10,6 +10,9 @@ #include "postgres.h" +#include "executor/executor.h" +#include "utils/datetime.h" + #include "distributed/intermediate_result_pruning.h" #include "distributed/intermediate_results.h" #include "distributed/listutils.h" @@ -19,8 +22,6 @@ #include "distributed/subplan_execution.h" #include "distributed/transaction_management.h" #include "distributed/worker_manager.h" -#include "executor/executor.h" -#include "utils/datetime.h" #define SECOND_TO_MILLI_SECOND 1000 #define MICRO_TO_MILLI_SECOND 0.001 diff --git a/src/backend/distributed/executor/transmit.c b/src/backend/distributed/executor/transmit.c index 24cbbb550..a10ae4fbf 100644 --- a/src/backend/distributed/executor/transmit.c +++ b/src/backend/distributed/executor/transmit.c @@ -7,24 +7,26 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" -#include "miscadmin.h" -#include "pgstat.h" - #include #include #include +#include "postgres.h" + +#include "miscadmin.h" +#include "pgstat.h" + #include "commands/defrem.h" +#include "libpq/libpq.h" +#include "libpq/pqformat.h" +#include "storage/fd.h" + #include "distributed/listutils.h" #include "distributed/relay_utility.h" #include "distributed/transmit.h" #include "distributed/utils/directory.h" -#include "distributed/worker_protocol.h" #include "distributed/version_compat.h" -#include "libpq/libpq.h" -#include "libpq/pqformat.h" -#include "storage/fd.h" +#include "distributed/worker_protocol.h" /* Local functions forward declarations */ diff --git a/src/backend/distributed/executor/tuple_destination.c b/src/backend/distributed/executor/tuple_destination.c index 42dbf001e..3c44d21c0 100644 --- a/src/backend/distributed/executor/tuple_destination.c +++ b/src/backend/distributed/executor/tuple_destination.c @@ -1,13 +1,15 @@ +#include +#include + #include "postgres.h" + #include "funcapi.h" #include "libpq-fe.h" #include "miscadmin.h" #include "pgstat.h" -#include -#include - #include "access/htup_details.h" + #include "distributed/multi_server_executor.h" #include "distributed/subplan_execution.h" #include "distributed/tuple_destination.h" diff --git a/src/backend/distributed/metadata/dependency.c b/src/backend/distributed/metadata/dependency.c index be2ceb3e3..01653721e 100644 --- a/src/backend/distributed/metadata/dependency.c +++ b/src/backend/distributed/metadata/dependency.c @@ -10,8 +10,7 @@ #include "postgres.h" -#include "distributed/commands.h" -#include "pg_version_constants.h" +#include "miscadmin.h" #include "access/genam.h" #include "access/heapam.h" @@ -36,6 +35,13 @@ #include "catalog/pg_type.h" #include "commands/extension.h" #include "common/hashfn.h" +#include "utils/fmgroids.h" +#include "utils/hsearch.h" +#include "utils/lsyscache.h" +#include "utils/syscache.h" + +#include "pg_version_constants.h" + #include "distributed/citus_depended_object.h" #include "distributed/commands.h" #include "distributed/commands/utility_hook.h" @@ -46,11 +52,6 @@ #include "distributed/metadata_cache.h" #include "distributed/metadata_sync.h" #include "distributed/version_compat.h" -#include "miscadmin.h" -#include "utils/fmgroids.h" -#include "utils/hsearch.h" -#include "utils/lsyscache.h" -#include "utils/syscache.h" /* * ObjectAddressCollector keeps track of collected ObjectAddresses. This can be used diff --git a/src/backend/distributed/metadata/distobject.c b/src/backend/distributed/metadata/distobject.c index 9f31add60..25d976a55 100644 --- a/src/backend/distributed/metadata/distobject.c +++ b/src/backend/distributed/metadata/distobject.c @@ -10,8 +10,6 @@ #include "postgres.h" -#include "pg_version_constants.h" - #include "miscadmin.h" #include "access/genam.h" @@ -27,20 +25,8 @@ #include "catalog/pg_namespace.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" -#include "citus_version.h" #include "commands/dbcommands.h" #include "commands/extension.h" -#include "distributed/listutils.h" -#include "distributed/colocation_utils.h" -#include "distributed/commands.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/metadata/dependency.h" -#include "distributed/metadata/distobject.h" -#include "distributed/metadata/pg_dist_object.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata_sync.h" -#include "distributed/version_compat.h" -#include "distributed/worker_transaction.h" #include "executor/spi.h" #include "nodes/makefuncs.h" #include "nodes/pg_list.h" @@ -51,6 +37,21 @@ #include "utils/regproc.h" #include "utils/rel.h" +#include "citus_version.h" +#include "pg_version_constants.h" + +#include "distributed/colocation_utils.h" +#include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/listutils.h" +#include "distributed/metadata/dependency.h" +#include "distributed/metadata/distobject.h" +#include "distributed/metadata/pg_dist_object.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_sync.h" +#include "distributed/version_compat.h" +#include "distributed/worker_transaction.h" + static char * CreatePgDistObjectEntryCommand(const ObjectAddress *objectAddress); static int ExecuteCommandAsSuperuser(char *query, int paramCount, Oid *paramTypes, Datum *paramValues); diff --git a/src/backend/distributed/metadata/metadata_cache.c b/src/backend/distributed/metadata/metadata_cache.c index 44179cffb..1b2fa229f 100644 --- a/src/backend/distributed/metadata/metadata_cache.c +++ b/src/backend/distributed/metadata/metadata_cache.c @@ -8,20 +8,17 @@ */ #include "postgres.h" -#include "pg_version_constants.h" -#include "pg_version_compat.h" -#include "stdint.h" -#include "postgres.h" #include "libpq-fe.h" #include "miscadmin.h" +#include "stdint.h" #include "access/genam.h" #include "access/heapam.h" #include "access/htup_details.h" #include "access/nbtree.h" -#include "access/xact.h" #include "access/sysattr.h" +#include "access/xact.h" #include "catalog/index.h" #include "catalog/indexing.h" #include "catalog/pg_am.h" @@ -30,38 +27,10 @@ #include "catalog/pg_extension.h" #include "catalog/pg_namespace.h" #include "catalog/pg_type.h" -#include "citus_version.h" #include "commands/dbcommands.h" #include "commands/extension.h" #include "commands/trigger.h" -#include "distributed/backend_data.h" -#include "distributed/citus_depended_object.h" -#include "distributed/colocation_utils.h" -#include "distributed/connection_management.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/multi_executor.h" -#include "distributed/function_utils.h" -#include "distributed/listutils.h" -#include "distributed/foreign_key_relationship.h" -#include "distributed/listutils.h" -#include "distributed/metadata_utility.h" -#include "distributed/metadata/pg_dist_object.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/pg_dist_local_group.h" -#include "distributed/pg_dist_node_metadata.h" -#include "distributed/pg_dist_node.h" -#include "distributed/pg_dist_partition.h" -#include "distributed/pg_dist_shard.h" -#include "distributed/pg_dist_placement.h" -#include "distributed/shared_library_init.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/utils/array_type.h" -#include "distributed/utils/function.h" -#include "distributed/version_compat.h" -#include "distributed/worker_manager.h" -#include "distributed/worker_protocol.h" +#include "common/hashfn.h" #include "executor/executor.h" #include "nodes/makefuncs.h" #include "nodes/memnodes.h" @@ -74,23 +43,54 @@ #include "utils/catcache.h" #include "utils/datum.h" #include "utils/elog.h" -#include "utils/hsearch.h" -#include "utils/jsonb.h" -#include "common/hashfn.h" -#include "utils/inval.h" #include "utils/fmgroids.h" +#include "utils/hsearch.h" +#include "utils/inval.h" +#include "utils/jsonb.h" #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/palloc.h" #include "utils/rel.h" -#if PG_VERSION_NUM < PG_VERSION_16 -#include "utils/relfilenodemap.h" -#endif #include "utils/relmapper.h" #include "utils/resowner.h" #include "utils/syscache.h" #include "utils/typcache.h" +#include "citus_version.h" +#include "pg_version_compat.h" +#include "pg_version_constants.h" + +#include "distributed/backend_data.h" +#include "distributed/citus_depended_object.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/colocation_utils.h" +#include "distributed/connection_management.h" +#include "distributed/foreign_key_relationship.h" +#include "distributed/function_utils.h" +#include "distributed/listutils.h" +#include "distributed/metadata/pg_dist_object.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/pg_dist_local_group.h" +#include "distributed/pg_dist_node.h" +#include "distributed/pg_dist_node_metadata.h" +#include "distributed/pg_dist_partition.h" +#include "distributed/pg_dist_placement.h" +#include "distributed/pg_dist_shard.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/shared_library_init.h" +#include "distributed/utils/array_type.h" +#include "distributed/utils/function.h" +#include "distributed/version_compat.h" +#include "distributed/worker_manager.h" +#include "distributed/worker_protocol.h" + +#if PG_VERSION_NUM < PG_VERSION_16 +#include "utils/relfilenodemap.h" +#endif + /* user configuration */ int ReadFromSecondaries = USE_SECONDARY_NODES_NEVER; diff --git a/src/backend/distributed/metadata/metadata_sync.c b/src/backend/distributed/metadata/metadata_sync.c index f04768457..f0be1995b 100644 --- a/src/backend/distributed/metadata/metadata_sync.c +++ b/src/backend/distributed/metadata/metadata_sync.c @@ -11,13 +11,15 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" -#include "miscadmin.h" - #include #include #include +#include "postgres.h" + +#include "miscadmin.h" +#include "pgstat.h" + #include "access/genam.h" #include "access/heapam.h" #include "access/htup_details.h" @@ -39,51 +41,13 @@ #include "catalog/pg_type.h" #include "commands/async.h" #include "commands/dbcommands.h" -#include "distributed/argutils.h" -#include "distributed/backend_data.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/colocation_utils.h" -#include "distributed/tenant_schema_metadata.h" -#include "distributed/commands.h" -#include "distributed/deparser.h" -#include "distributed/distribution_column.h" -#include "distributed/listutils.h" -#include "distributed/metadata_utility.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/maintenanced.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata_sync.h" -#include "distributed/metadata_utility.h" -#include "distributed/metadata/dependency.h" -#include "distributed/metadata/distobject.h" -#include "distributed/metadata/pg_dist_object.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_join_order.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/pg_dist_colocation.h" -#include "distributed/pg_dist_node.h" -#include "distributed/pg_dist_shard.h" -#include "distributed/pg_dist_schema.h" -#include "distributed/relation_access_tracking.h" -#include "distributed/remote_commands.h" -#include "distributed/resource_lock.h" -#include "distributed/utils/array_type.h" -#include "distributed/utils/function.h" -#include "distributed/worker_manager.h" -#include "distributed/worker_protocol.h" -#include "distributed/worker_transaction.h" -#include "distributed/version_compat.h" -#include "distributed/commands/utility_hook.h" #include "executor/spi.h" #include "foreign/foreign.h" -#include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/pg_list.h" -#include "pgstat.h" +#include "parser/parse_type.h" #include "postmaster/bgworker.h" #include "postmaster/postmaster.h" -#include "parser/parse_type.h" #include "storage/lmgr.h" #include "utils/builtins.h" #include "utils/fmgroids.h" @@ -92,6 +56,42 @@ #include "utils/snapmgr.h" #include "utils/syscache.h" +#include "distributed/argutils.h" +#include "distributed/backend_data.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/colocation_utils.h" +#include "distributed/commands.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/deparser.h" +#include "distributed/distribution_column.h" +#include "distributed/listutils.h" +#include "distributed/maintenanced.h" +#include "distributed/metadata/dependency.h" +#include "distributed/metadata/distobject.h" +#include "distributed/metadata/pg_dist_object.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_join_order.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/pg_dist_colocation.h" +#include "distributed/pg_dist_node.h" +#include "distributed/pg_dist_schema.h" +#include "distributed/pg_dist_shard.h" +#include "distributed/relation_access_tracking.h" +#include "distributed/remote_commands.h" +#include "distributed/resource_lock.h" +#include "distributed/tenant_schema_metadata.h" +#include "distributed/utils/array_type.h" +#include "distributed/utils/function.h" +#include "distributed/version_compat.h" +#include "distributed/worker_manager.h" +#include "distributed/worker_protocol.h" +#include "distributed/worker_transaction.h" + /* managed via a GUC */ char *EnableManualMetadataChangesForUser = ""; diff --git a/src/backend/distributed/metadata/metadata_utility.c b/src/backend/distributed/metadata/metadata_utility.c index 0d9963c12..15e167008 100644 --- a/src/backend/distributed/metadata/metadata_utility.c +++ b/src/backend/distributed/metadata/metadata_utility.c @@ -13,12 +13,11 @@ #include #include "postgres.h" + #include "funcapi.h" #include "libpq-fe.h" #include "miscadmin.h" -#include "pg_version_constants.h" - #include "access/genam.h" #include "access/htup_details.h" #include "access/sysattr.h" @@ -30,44 +29,9 @@ #include "catalog/pg_constraint.h" #include "catalog/pg_extension.h" #include "catalog/pg_namespace.h" -#if PG_VERSION_NUM >= PG_VERSION_16 -#include "catalog/pg_proc_d.h" -#endif #include "catalog/pg_type.h" #include "commands/extension.h" #include "commands/sequence.h" -#include "distributed/background_jobs.h" -#include "distributed/colocation_utils.h" -#include "distributed/connection_management.h" -#include "distributed/citus_nodes.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/listutils.h" -#include "distributed/lock_graph.h" -#include "distributed/metadata_utility.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata_sync.h" -#include "distributed/multi_join_order.h" -#include "distributed/multi_logical_optimizer.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/pg_dist_background_job.h" -#include "distributed/pg_dist_background_task.h" -#include "distributed/pg_dist_backrgound_task_depend.h" -#include "distributed/pg_dist_colocation.h" -#include "distributed/pg_dist_partition.h" -#include "distributed/pg_dist_shard.h" -#include "distributed/pg_dist_placement.h" -#include "distributed/reference_table_utils.h" -#include "distributed/relay_utility.h" -#include "distributed/resource_lock.h" -#include "distributed/remote_commands.h" -#include "distributed/shard_rebalancer.h" -#include "distributed/tuplestore.h" -#include "distributed/utils/array_type.h" -#include "distributed/worker_manager.h" -#include "distributed/worker_protocol.h" -#include "distributed/version_compat.h" #include "nodes/makefuncs.h" #include "parser/scansup.h" #include "storage/lmgr.h" @@ -82,6 +46,45 @@ #include "utils/rel.h" #include "utils/syscache.h" +#include "pg_version_constants.h" + +#include "distributed/background_jobs.h" +#include "distributed/citus_nodes.h" +#include "distributed/citus_safe_lib.h" +#include "distributed/colocation_utils.h" +#include "distributed/connection_management.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/listutils.h" +#include "distributed/lock_graph.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_join_order.h" +#include "distributed/multi_logical_optimizer.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/pg_dist_background_job.h" +#include "distributed/pg_dist_background_task.h" +#include "distributed/pg_dist_backrgound_task_depend.h" +#include "distributed/pg_dist_colocation.h" +#include "distributed/pg_dist_partition.h" +#include "distributed/pg_dist_placement.h" +#include "distributed/pg_dist_shard.h" +#include "distributed/reference_table_utils.h" +#include "distributed/relay_utility.h" +#include "distributed/remote_commands.h" +#include "distributed/resource_lock.h" +#include "distributed/shard_rebalancer.h" +#include "distributed/tuplestore.h" +#include "distributed/utils/array_type.h" +#include "distributed/version_compat.h" +#include "distributed/worker_manager.h" +#include "distributed/worker_protocol.h" + +#if PG_VERSION_NUM >= PG_VERSION_16 +#include "catalog/pg_proc_d.h" +#endif + #define DISK_SPACE_FIELDS 2 /* Local functions forward declarations */ diff --git a/src/backend/distributed/metadata/node_metadata.c b/src/backend/distributed/metadata/node_metadata.c index 041c6dcc4..2bd2b8a09 100644 --- a/src/backend/distributed/metadata/node_metadata.c +++ b/src/backend/distributed/metadata/node_metadata.c @@ -5,34 +5,49 @@ * Copyright (c) Citus Data, Inc. */ #include "postgres.h" -#include "miscadmin.h" + #include "funcapi.h" -#include "utils/plancache.h" +#include "miscadmin.h" #include "access/genam.h" #include "access/heapam.h" #include "access/htup.h" #include "access/htup_details.h" #include "access/skey.h" -#include "access/skey.h" #include "access/tupmacs.h" #include "access/xact.h" #include "catalog/indexing.h" #include "catalog/namespace.h" #include "commands/sequence.h" +#include "executor/spi.h" +#include "lib/stringinfo.h" +#include "postmaster/postmaster.h" +#include "storage/bufmgr.h" +#include "storage/fd.h" +#include "storage/lmgr.h" +#include "storage/lock.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/lsyscache.h" +#include "utils/plancache.h" +#include "utils/rel.h" +#include "utils/relcache.h" + #include "distributed/citus_acquire_lock.h" #include "distributed/citus_safe_lib.h" #include "distributed/colocation_utils.h" #include "distributed/commands.h" #include "distributed/commands/utility_hook.h" #include "distributed/connection_management.h" -#include "distributed/maintenanced.h" #include "distributed/coordinator_protocol.h" -#include "distributed/metadata_utility.h" +#include "distributed/maintenanced.h" #include "distributed/metadata/distobject.h" +#include "distributed/metadata/pg_dist_object.h" #include "distributed/metadata_cache.h" #include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" #include "distributed/multi_join_order.h" +#include "distributed/multi_partitioning_utils.h" #include "distributed/multi_router_planner.h" #include "distributed/pg_dist_node.h" #include "distributed/pg_dist_node_metadata.h" @@ -40,26 +55,12 @@ #include "distributed/remote_commands.h" #include "distributed/resource_lock.h" #include "distributed/shardinterval_utils.h" -#include "distributed/multi_partitioning_utils.h" #include "distributed/shared_connection_stats.h" #include "distributed/string_utils.h" -#include "distributed/metadata/pg_dist_object.h" #include "distributed/transaction_recovery.h" #include "distributed/version_compat.h" #include "distributed/worker_manager.h" #include "distributed/worker_transaction.h" -#include "executor/spi.h" -#include "lib/stringinfo.h" -#include "postmaster/postmaster.h" -#include "storage/bufmgr.h" -#include "storage/lmgr.h" -#include "storage/lock.h" -#include "storage/fd.h" -#include "utils/builtins.h" -#include "utils/fmgroids.h" -#include "utils/lsyscache.h" -#include "utils/rel.h" -#include "utils/relcache.h" #define INVALID_GROUP_ID -1 diff --git a/src/backend/distributed/metadata/pg_get_object_address_13_14_15.c b/src/backend/distributed/metadata/pg_get_object_address_13_14_15.c index a7f40e2ad..abe378cdb 100644 --- a/src/backend/distributed/metadata/pg_get_object_address_13_14_15.c +++ b/src/backend/distributed/metadata/pg_get_object_address_13_14_15.c @@ -16,23 +16,26 @@ */ #include "postgres.h" + #include "miscadmin.h" #include "catalog/objectaddress.h" #include "catalog/pg_type.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/metadata/dependency.h" -#include "distributed/metadata/distobject.h" -#include "pg_version_constants.h" -#include "distributed/version_compat.h" +#include "mb/pg_wchar.h" #include "nodes/value.h" +#include "parser/parse_type.h" #include "utils/array.h" #include "utils/builtins.h" #include "utils/fmgroids.h" #include "utils/varlena.h" -#include "mb/pg_wchar.h" -#include "parser/parse_type.h" + +#include "pg_version_constants.h" + +#include "distributed/citus_ruleutils.h" +#include "distributed/citus_safe_lib.h" +#include "distributed/metadata/dependency.h" +#include "distributed/metadata/distobject.h" +#include "distributed/version_compat.h" static void ErrorIfCurrentUserCanNotDistributeObject(char *textType, ObjectType type, diff --git a/src/backend/distributed/operations/citus_create_restore_point.c b/src/backend/distributed/operations/citus_create_restore_point.c index 42fc5311f..8a5e738e4 100644 --- a/src/backend/distributed/operations/citus_create_restore_point.c +++ b/src/backend/distributed/operations/citus_create_restore_point.c @@ -10,22 +10,24 @@ */ #include "postgres.h" + #include "libpq-fe.h" #include "access/xlog.h" #include "access/xlog_internal.h" #include "catalog/pg_type.h" -#include "distributed/connection_management.h" -#include "distributed/listutils.h" -#include "distributed/metadata_utility.h" -#include "distributed/metadata_cache.h" -#include "distributed/remote_commands.h" #include "nodes/pg_list.h" #include "storage/lmgr.h" #include "storage/lock.h" #include "utils/builtins.h" #include "utils/pg_lsn.h" +#include "distributed/connection_management.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" +#include "distributed/remote_commands.h" + #define CREATE_RESTORE_POINT_COMMAND "SELECT pg_catalog.pg_create_restore_point($1::text)" diff --git a/src/backend/distributed/operations/citus_split_shard_by_split_points.c b/src/backend/distributed/operations/citus_split_shard_by_split_points.c index 5bdbaf576..076e58d4c 100644 --- a/src/backend/distributed/operations/citus_split_shard_by_split_points.c +++ b/src/backend/distributed/operations/citus_split_shard_by_split_points.c @@ -10,19 +10,21 @@ */ #include "postgres.h" + #include "catalog/pg_type.h" -#include "nodes/pg_list.h" #include "lib/stringinfo.h" +#include "nodes/pg_list.h" #include "utils/builtins.h" #include "utils/lsyscache.h" -#include "distributed/utils/array_type.h" + #include "distributed/colocation_utils.h" -#include "distributed/metadata_cache.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/coordinator_protocol.h" #include "distributed/connection_management.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/metadata_cache.h" #include "distributed/remote_commands.h" #include "distributed/shard_split.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/utils/array_type.h" #include "distributed/utils/distribution_column_map.h" /* declarations for dynamic loading */ diff --git a/src/backend/distributed/operations/citus_tools.c b/src/backend/distributed/operations/citus_tools.c index 8f6f80c2b..bc4aa5560 100644 --- a/src/backend/distributed/operations/citus_tools.c +++ b/src/backend/distributed/operations/citus_tools.c @@ -12,8 +12,15 @@ #include "postgres.h" +#include "funcapi.h" +#include "libpq-fe.h" +#include "miscadmin.h" + #include "access/htup_details.h" #include "catalog/pg_type.h" +#include "lib/stringinfo.h" +#include "utils/builtins.h" + #include "distributed/backend_data.h" #include "distributed/connection_management.h" #include "distributed/metadata_cache.h" @@ -23,11 +30,6 @@ #include "distributed/utils/function.h" #include "distributed/version_compat.h" #include "distributed/worker_protocol.h" -#include "funcapi.h" -#include "lib/stringinfo.h" -#include "libpq-fe.h" -#include "miscadmin.h" -#include "utils/builtins.h" PG_FUNCTION_INFO_V1(master_run_on_worker); diff --git a/src/backend/distributed/operations/create_shards.c b/src/backend/distributed/operations/create_shards.c index 8bc3b249f..962547051 100644 --- a/src/backend/distributed/operations/create_shards.c +++ b/src/backend/distributed/operations/create_shards.c @@ -10,35 +10,22 @@ *------------------------------------------------------------------------- */ +#include +#include +#include +#include +#include + #include "postgres.h" + #include "c.h" #include "fmgr.h" #include "libpq-fe.h" #include "miscadmin.h" #include "port.h" -#include -#include -#include -#include -#include - #include "catalog/namespace.h" #include "catalog/pg_class.h" -#include "distributed/listutils.h" -#include "distributed/metadata_utility.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_join_order.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/pg_dist_partition.h" -#include "distributed/pg_dist_shard.h" -#include "distributed/reference_table_utils.h" -#include "distributed/resource_lock.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/transaction_management.h" -#include "distributed/worker_manager.h" #include "lib/stringinfo.h" #include "nodes/pg_list.h" #include "nodes/primnodes.h" @@ -52,6 +39,21 @@ #include "utils/lsyscache.h" #include "utils/palloc.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_join_order.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/pg_dist_partition.h" +#include "distributed/pg_dist_shard.h" +#include "distributed/reference_table_utils.h" +#include "distributed/resource_lock.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/transaction_management.h" +#include "distributed/worker_manager.h" + /* declarations for dynamic loading */ PG_FUNCTION_INFO_V1(master_create_worker_shards); diff --git a/src/backend/distributed/operations/delete_protocol.c b/src/backend/distributed/operations/delete_protocol.c index 54cb568be..c36121b00 100644 --- a/src/backend/distributed/operations/delete_protocol.c +++ b/src/backend/distributed/operations/delete_protocol.c @@ -13,9 +13,9 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" +#include -#include "pg_version_constants.h" +#include "postgres.h" #include "c.h" #include "fmgr.h" @@ -23,17 +23,37 @@ #include "miscadmin.h" #include "port.h" -#include - #include "access/xact.h" #include "catalog/namespace.h" #include "commands/dbcommands.h" +#include "lib/stringinfo.h" +#include "nodes/nodeFuncs.h" +#include "nodes/nodes.h" +#include "nodes/parsenodes.h" +#include "nodes/pathnodes.h" +#include "nodes/pg_list.h" +#include "nodes/primnodes.h" +#include "optimizer/clauses.h" +#include "optimizer/optimizer.h" +#include "optimizer/restrictinfo.h" +#include "storage/lmgr.h" +#include "storage/lock.h" +#include "tcop/tcopprot.h" +#include "utils/array.h" +#include "utils/builtins.h" +#include "utils/elog.h" +#include "utils/errcodes.h" +#include "utils/lsyscache.h" +#include "utils/varlena.h" + +#include "pg_version_constants.h" + #include "distributed/commands/utility_hook.h" #include "distributed/connection_management.h" +#include "distributed/coordinator_protocol.h" #include "distributed/deparse_shard_query.h" #include "distributed/listutils.h" #include "distributed/local_executor.h" -#include "distributed/coordinator_protocol.h" #include "distributed/metadata_sync.h" #include "distributed/multi_join_order.h" #include "distributed/multi_logical_planner.h" @@ -47,25 +67,6 @@ #include "distributed/shard_cleaner.h" #include "distributed/worker_protocol.h" #include "distributed/worker_transaction.h" -#include "lib/stringinfo.h" -#include "nodes/nodeFuncs.h" -#include "nodes/nodes.h" -#include "nodes/parsenodes.h" -#include "nodes/pg_list.h" -#include "nodes/primnodes.h" -#include "optimizer/clauses.h" -#include "nodes/pathnodes.h" -#include "optimizer/optimizer.h" -#include "optimizer/restrictinfo.h" -#include "storage/lock.h" -#include "storage/lmgr.h" -#include "tcop/tcopprot.h" -#include "utils/array.h" -#include "utils/builtins.h" -#include "utils/elog.h" -#include "utils/errcodes.h" -#include "utils/lsyscache.h" -#include "utils/varlena.h" /* Local functions forward declarations */ diff --git a/src/backend/distributed/operations/health_check.c b/src/backend/distributed/operations/health_check.c index b3246f888..c908606c1 100644 --- a/src/backend/distributed/operations/health_check.c +++ b/src/backend/distributed/operations/health_check.c @@ -13,6 +13,8 @@ #include "postgres.h" +#include "utils/builtins.h" + #include "distributed/argutils.h" #include "distributed/listutils.h" #include "distributed/lock_graph.h" @@ -20,7 +22,6 @@ #include "distributed/remote_commands.h" #include "distributed/tuplestore.h" #include "distributed/worker_manager.h" -#include "utils/builtins.h" /* simple query to run on workers to check connectivity */ #define CONNECTIVITY_CHECK_QUERY "SELECT 1" diff --git a/src/backend/distributed/operations/isolate_shards.c b/src/backend/distributed/operations/isolate_shards.c index ec89ae402..502b00f5b 100644 --- a/src/backend/distributed/operations/isolate_shards.c +++ b/src/backend/distributed/operations/isolate_shards.c @@ -11,11 +11,20 @@ */ #include "postgres.h" + #include "c.h" #include "fmgr.h" #include "libpq-fe.h" #include "catalog/pg_class.h" +#include "nodes/pg_list.h" +#include "storage/lock.h" +#include "utils/builtins.h" +#include "utils/elog.h" +#include "utils/errcodes.h" +#include "utils/lsyscache.h" +#include "utils/typcache.h" + #include "distributed/colocation_utils.h" #include "distributed/coordinator_protocol.h" #include "distributed/metadata_cache.h" @@ -25,22 +34,15 @@ #include "distributed/multi_router_planner.h" #include "distributed/pg_dist_partition.h" #include "distributed/pg_dist_shard.h" -#include "distributed/remote_commands.h" #include "distributed/reference_table_utils.h" +#include "distributed/remote_commands.h" #include "distributed/resource_lock.h" +#include "distributed/shard_split.h" +#include "distributed/utils/distribution_column_map.h" +#include "distributed/version_compat.h" #include "distributed/worker_manager.h" #include "distributed/worker_protocol.h" #include "distributed/worker_transaction.h" -#include "distributed/version_compat.h" -#include "distributed/shard_split.h" -#include "distributed/utils/distribution_column_map.h" -#include "nodes/pg_list.h" -#include "storage/lock.h" -#include "utils/builtins.h" -#include "utils/elog.h" -#include "utils/errcodes.h" -#include "utils/lsyscache.h" -#include "utils/typcache.h" /* declarations for dynamic loading */ PG_FUNCTION_INFO_V1(isolate_tenant_to_new_shard); diff --git a/src/backend/distributed/operations/modify_multiple_shards.c b/src/backend/distributed/operations/modify_multiple_shards.c index 8d596a10b..9e2879728 100644 --- a/src/backend/distributed/operations/modify_multiple_shards.c +++ b/src/backend/distributed/operations/modify_multiple_shards.c @@ -14,40 +14,17 @@ #include "postgres.h" -#include "pg_version_constants.h" - #include "funcapi.h" #include "libpq-fe.h" #include "miscadmin.h" - #include "catalog/pg_class.h" #include "commands/dbcommands.h" #include "commands/event_trigger.h" -#include "distributed/citus_clauses.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/commands.h" -#include "distributed/listutils.h" -#include "distributed/metadata_utility.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata_sync.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/multi_server_executor.h" -#include "distributed/distributed_planner.h" -#include "distributed/pg_dist_shard.h" -#include "distributed/pg_dist_partition.h" -#include "distributed/resource_lock.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/shard_pruning.h" -#include "distributed/version_compat.h" -#include "distributed/worker_protocol.h" -#include "distributed/worker_transaction.h" +#include "nodes/makefuncs.h" #include "optimizer/clauses.h" #include "optimizer/optimizer.h" #include "optimizer/restrictinfo.h" -#include "nodes/makefuncs.h" #include "tcop/tcopprot.h" #include "utils/builtins.h" #include "utils/datum.h" @@ -55,6 +32,29 @@ #include "utils/lsyscache.h" #include "utils/memutils.h" +#include "pg_version_constants.h" + +#include "distributed/citus_clauses.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/commands.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/distributed_planner.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/multi_server_executor.h" +#include "distributed/pg_dist_partition.h" +#include "distributed/pg_dist_shard.h" +#include "distributed/resource_lock.h" +#include "distributed/shard_pruning.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/version_compat.h" +#include "distributed/worker_protocol.h" +#include "distributed/worker_transaction.h" + PG_FUNCTION_INFO_V1(master_modify_multiple_shards); diff --git a/src/backend/distributed/operations/node_protocol.c b/src/backend/distributed/operations/node_protocol.c index eeaf34321..52e44bea0 100644 --- a/src/backend/distributed/operations/node_protocol.c +++ b/src/backend/distributed/operations/node_protocol.c @@ -11,17 +11,15 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" +#include -#include "pg_version_constants.h" +#include "postgres.h" #include "c.h" #include "fmgr.h" #include "funcapi.h" #include "miscadmin.h" -#include - #include "access/attnum.h" #include "access/genam.h" #include "access/heapam.h" @@ -37,20 +35,9 @@ #include "catalog/pg_class.h" #include "catalog/pg_constraint.h" #include "catalog/pg_index.h" -#include "catalog/pg_type.h" #include "catalog/pg_namespace.h" +#include "catalog/pg_type.h" #include "commands/sequence.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/commands.h" -#include "distributed/listutils.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata_sync.h" -#include "distributed/namespace_utils.h" -#include "distributed/pg_dist_shard.h" -#include "distributed/shared_library_init.h" -#include "distributed/version_compat.h" -#include "distributed/worker_manager.h" #include "foreign/foreign.h" #include "lib/stringinfo.h" #include "nodes/pg_list.h" @@ -65,6 +52,20 @@ #include "utils/ruleutils.h" #include "utils/varlena.h" +#include "pg_version_constants.h" + +#include "distributed/citus_ruleutils.h" +#include "distributed/commands.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_sync.h" +#include "distributed/namespace_utils.h" +#include "distributed/pg_dist_shard.h" +#include "distributed/shared_library_init.h" +#include "distributed/version_compat.h" +#include "distributed/worker_manager.h" + /* Shard related configuration */ int ShardCount = 32; int ShardReplicationFactor = 1; /* desired replication factor for shards */ diff --git a/src/backend/distributed/operations/partitioning.c b/src/backend/distributed/operations/partitioning.c index 9e2057927..afcaa8ac1 100644 --- a/src/backend/distributed/operations/partitioning.c +++ b/src/backend/distributed/operations/partitioning.c @@ -9,13 +9,12 @@ */ #include "postgres.h" + #include "fmgr.h" #include "funcapi.h" #include "access/htup.h" #include "access/htup_details.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata_utility.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "utils/builtins.h" @@ -23,6 +22,9 @@ #include "utils/lsyscache.h" #include "utils/syscache.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" + /* exports for SQL callable functions */ PG_FUNCTION_INFO_V1(time_partition_range); diff --git a/src/backend/distributed/operations/replicate_none_dist_table_shard.c b/src/backend/distributed/operations/replicate_none_dist_table_shard.c index c28490367..33a98ee42 100644 --- a/src/backend/distributed/operations/replicate_none_dist_table_shard.c +++ b/src/backend/distributed/operations/replicate_none_dist_table_shard.c @@ -10,7 +10,9 @@ */ #include "postgres.h" + #include "miscadmin.h" + #include "nodes/pg_list.h" #include "distributed/adaptive_executor.h" diff --git a/src/backend/distributed/operations/shard_cleaner.c b/src/backend/distributed/operations/shard_cleaner.c index 42877bf10..790414530 100644 --- a/src/backend/distributed/operations/shard_cleaner.c +++ b/src/backend/distributed/operations/shard_cleaner.c @@ -10,27 +10,29 @@ */ #include "postgres.h" + #include "miscadmin.h" + #include "access/genam.h" #include "access/xact.h" #include "catalog/namespace.h" #include "commands/dbcommands.h" #include "commands/sequence.h" -#include "postmaster/postmaster.h" #include "nodes/makefuncs.h" +#include "postmaster/postmaster.h" #include "utils/builtins.h" #include "utils/fmgroids.h" #include "distributed/citus_safe_lib.h" -#include "distributed/listutils.h" #include "distributed/coordinator_protocol.h" +#include "distributed/listutils.h" #include "distributed/metadata_cache.h" -#include "distributed/shard_cleaner.h" -#include "distributed/shard_rebalancer.h" +#include "distributed/pg_dist_cleanup.h" #include "distributed/remote_commands.h" #include "distributed/resource_lock.h" +#include "distributed/shard_cleaner.h" +#include "distributed/shard_rebalancer.h" #include "distributed/worker_transaction.h" -#include "distributed/pg_dist_cleanup.h" #define REPLICATION_SLOT_CATALOG_TABLE_NAME "pg_replication_slots" #define STR_ERRCODE_OBJECT_IN_USE "55006" diff --git a/src/backend/distributed/operations/shard_rebalancer.c b/src/backend/distributed/operations/shard_rebalancer.c index 213d135e6..d1868d3c4 100644 --- a/src/backend/distributed/operations/shard_rebalancer.c +++ b/src/backend/distributed/operations/shard_rebalancer.c @@ -12,30 +12,47 @@ */ -#include "postgres.h" -#include "libpq-fe.h" - #include +#include "postgres.h" + +#include "funcapi.h" +#include "libpq-fe.h" +#include "miscadmin.h" + +#include "access/genam.h" +#include "access/htup_details.h" +#include "catalog/pg_proc.h" +#include "catalog/pg_type.h" +#include "commands/dbcommands.h" +#include "commands/sequence.h" +#include "common/hashfn.h" +#include "postmaster/postmaster.h" +#include "storage/lmgr.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/guc_tables.h" +#include "utils/json.h" +#include "utils/lsyscache.h" +#include "utils/memutils.h" +#include "utils/pg_lsn.h" +#include "utils/syscache.h" +#include "utils/varlena.h" + #include "pg_version_constants.h" -#include "access/htup_details.h" -#include "access/genam.h" -#include "catalog/pg_type.h" -#include "catalog/pg_proc.h" -#include "commands/dbcommands.h" -#include "commands/sequence.h" #include "distributed/argutils.h" #include "distributed/background_jobs.h" -#include "distributed/citus_safe_lib.h" #include "distributed/citus_ruleutils.h" +#include "distributed/citus_safe_lib.h" #include "distributed/colocation_utils.h" +#include "distributed/commands/utility_hook.h" #include "distributed/connection_management.h" +#include "distributed/coordinator_protocol.h" #include "distributed/enterprise.h" #include "distributed/hash_helpers.h" #include "distributed/listutils.h" #include "distributed/lock_graph.h" -#include "distributed/coordinator_protocol.h" #include "distributed/metadata_cache.h" #include "distributed/metadata_utility.h" #include "distributed/multi_logical_replication.h" @@ -45,27 +62,12 @@ #include "distributed/reference_table_utils.h" #include "distributed/remote_commands.h" #include "distributed/resource_lock.h" -#include "distributed/shard_rebalancer.h" #include "distributed/shard_cleaner.h" +#include "distributed/shard_rebalancer.h" #include "distributed/shard_transfer.h" #include "distributed/tuplestore.h" #include "distributed/utils/array_type.h" #include "distributed/worker_protocol.h" -#include "funcapi.h" -#include "miscadmin.h" -#include "postmaster/postmaster.h" -#include "storage/lmgr.h" -#include "utils/builtins.h" -#include "utils/fmgroids.h" -#include "utils/json.h" -#include "utils/lsyscache.h" -#include "utils/memutils.h" -#include "utils/pg_lsn.h" -#include "utils/syscache.h" -#include "common/hashfn.h" -#include "utils/varlena.h" -#include "utils/guc_tables.h" -#include "distributed/commands/utility_hook.h" /* RebalanceOptions are the options used to control the rebalance algorithm */ typedef struct RebalanceOptions diff --git a/src/backend/distributed/operations/shard_split.c b/src/backend/distributed/operations/shard_split.c index 0772b03b4..cf9f301b7 100644 --- a/src/backend/distributed/operations/shard_split.c +++ b/src/backend/distributed/operations/shard_split.c @@ -10,41 +10,43 @@ */ #include "postgres.h" + #include "miscadmin.h" + +#include "commands/dbcommands.h" #include "common/hashfn.h" -#include "nodes/pg_list.h" -#include "utils/array.h" -#include "distributed/utils/array_type.h" #include "lib/stringinfo.h" +#include "nodes/pg_list.h" +#include "postmaster/postmaster.h" +#include "utils/array.h" #include "utils/builtins.h" #include "utils/lsyscache.h" -#include "distributed/shared_library_init.h" + #include "distributed/adaptive_executor.h" #include "distributed/colocation_utils.h" +#include "distributed/connection_management.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/deparse_shard_query.h" #include "distributed/hash_helpers.h" #include "distributed/metadata_cache.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/connection_management.h" -#include "distributed/remote_commands.h" -#include "distributed/shard_split.h" -#include "distributed/reference_table_utils.h" -#include "distributed/shard_transfer.h" -#include "distributed/resource_lock.h" +#include "distributed/metadata_sync.h" #include "distributed/multi_partitioning_utils.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/pg_dist_shard.h" +#include "distributed/reference_table_utils.h" +#include "distributed/remote_commands.h" +#include "distributed/resource_lock.h" +#include "distributed/shard_cleaner.h" +#include "distributed/shard_rebalancer.h" +#include "distributed/shard_split.h" +#include "distributed/shard_transfer.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/shardsplit_logical_replication.h" +#include "distributed/shared_library_init.h" +#include "distributed/utils/array_type.h" +#include "distributed/utils/distribution_column_map.h" #include "distributed/worker_manager.h" #include "distributed/worker_transaction.h" -#include "distributed/shard_cleaner.h" -#include "distributed/shared_library_init.h" -#include "distributed/pg_dist_shard.h" -#include "distributed/metadata_sync.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/utils/distribution_column_map.h" -#include "commands/dbcommands.h" -#include "distributed/shardsplit_logical_replication.h" -#include "distributed/deparse_shard_query.h" -#include "distributed/shard_rebalancer.h" -#include "postmaster/postmaster.h" /* * Entry for map that tracks ShardInterval -> Placement Node diff --git a/src/backend/distributed/operations/shard_transfer.c b/src/backend/distributed/operations/shard_transfer.c index 79895cc3d..7d6747caf 100644 --- a/src/backend/distributed/operations/shard_transfer.c +++ b/src/backend/distributed/operations/shard_transfer.c @@ -9,27 +9,39 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" -#include "fmgr.h" -#include "miscadmin.h" - #include #include +#include "postgres.h" + +#include "fmgr.h" +#include "miscadmin.h" + #include "access/htup_details.h" #include "catalog/pg_class.h" #include "catalog/pg_enum.h" +#include "lib/stringinfo.h" +#include "nodes/pg_list.h" +#include "storage/lmgr.h" +#include "storage/lock.h" +#include "utils/builtins.h" +#include "utils/elog.h" +#include "utils/errcodes.h" +#include "utils/lsyscache.h" +#include "utils/palloc.h" +#include "utils/rel.h" +#include "utils/syscache.h" + #include "distributed/adaptive_executor.h" #include "distributed/backend_data.h" #include "distributed/citus_ruleutils.h" #include "distributed/colocation_utils.h" #include "distributed/commands.h" #include "distributed/connection_management.h" +#include "distributed/coordinator_protocol.h" #include "distributed/deparse_shard_query.h" #include "distributed/distributed_planner.h" #include "distributed/listutils.h" -#include "distributed/shard_cleaner.h" -#include "distributed/coordinator_protocol.h" #include "distributed/metadata_cache.h" #include "distributed/metadata_sync.h" #include "distributed/multi_join_order.h" @@ -39,24 +51,13 @@ #include "distributed/reference_table_utils.h" #include "distributed/remote_commands.h" #include "distributed/resource_lock.h" +#include "distributed/shard_cleaner.h" #include "distributed/shard_rebalancer.h" #include "distributed/shard_split.h" #include "distributed/shard_transfer.h" #include "distributed/worker_manager.h" #include "distributed/worker_protocol.h" #include "distributed/worker_transaction.h" -#include "lib/stringinfo.h" -#include "nodes/pg_list.h" -#include "storage/lmgr.h" -#include "storage/lock.h" -#include "storage/lmgr.h" -#include "utils/builtins.h" -#include "utils/elog.h" -#include "utils/errcodes.h" -#include "utils/lsyscache.h" -#include "utils/palloc.h" -#include "utils/rel.h" -#include "utils/syscache.h" /* local type declarations */ diff --git a/src/backend/distributed/operations/stage_protocol.c b/src/backend/distributed/operations/stage_protocol.c index 421593c66..5770d648e 100644 --- a/src/backend/distributed/operations/stage_protocol.c +++ b/src/backend/distributed/operations/stage_protocol.c @@ -15,31 +15,40 @@ */ #include "postgres.h" + #include "funcapi.h" -#include "miscadmin.h" #include "libpq-fe.h" +#include "miscadmin.h" #include "access/htup_details.h" #include "access/xact.h" -#include "commands/tablecmds.h" #include "catalog/indexing.h" #include "catalog/namespace.h" #include "catalog/partition.h" +#include "commands/tablecmds.h" +#include "storage/lmgr.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/inval.h" +#include "utils/lsyscache.h" +#include "utils/rel.h" +#include "utils/syscache.h" + +#include "distributed/adaptive_executor.h" #include "distributed/citus_ruleutils.h" #include "distributed/colocation_utils.h" #include "distributed/commands.h" -#include "distributed/adaptive_executor.h" #include "distributed/connection_management.h" +#include "distributed/coordinator_protocol.h" #include "distributed/deparse_shard_query.h" #include "distributed/distributed_planner.h" #include "distributed/foreign_key_relationship.h" #include "distributed/hash_helpers.h" #include "distributed/listutils.h" #include "distributed/lock_graph.h" -#include "distributed/multi_executor.h" -#include "distributed/metadata_utility.h" -#include "distributed/coordinator_protocol.h" #include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_executor.h" #include "distributed/multi_join_order.h" #include "distributed/multi_partitioning_utils.h" #include "distributed/pg_dist_partition.h" @@ -50,16 +59,9 @@ #include "distributed/remote_commands.h" #include "distributed/resource_lock.h" #include "distributed/transaction_management.h" +#include "distributed/version_compat.h" #include "distributed/worker_manager.h" #include "distributed/worker_protocol.h" -#include "distributed/version_compat.h" -#include "storage/lmgr.h" -#include "utils/builtins.h" -#include "utils/fmgroids.h" -#include "utils/inval.h" -#include "utils/lsyscache.h" -#include "utils/syscache.h" -#include "utils/rel.h" /* Local functions forward declarations */ diff --git a/src/backend/distributed/operations/worker_copy_table_to_node_udf.c b/src/backend/distributed/operations/worker_copy_table_to_node_udf.c index f0f83744d..c603de72a 100644 --- a/src/backend/distributed/operations/worker_copy_table_to_node_udf.c +++ b/src/backend/distributed/operations/worker_copy_table_to_node_udf.c @@ -15,6 +15,7 @@ #include "utils/builtins.h" #include "utils/lsyscache.h" + #include "distributed/citus_ruleutils.h" #include "distributed/metadata_cache.h" #include "distributed/multi_executor.h" diff --git a/src/backend/distributed/operations/worker_node_manager.c b/src/backend/distributed/operations/worker_node_manager.c index e616770dd..ba622e4d7 100644 --- a/src/backend/distributed/operations/worker_node_manager.c +++ b/src/backend/distributed/operations/worker_node_manager.c @@ -12,16 +12,13 @@ */ #include "postgres.h" + #include "miscadmin.h" #include "commands/dbcommands.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/hash_helpers.h" -#include "distributed/listutils.h" -#include "distributed/metadata_cache.h" -#include "distributed/worker_manager.h" -#include "libpq/hba.h" +#include "common/hashfn.h" #include "common/ip.h" +#include "libpq/hba.h" #include "libpq/libpq-be.h" #include "postmaster/postmaster.h" #include "storage/fd.h" @@ -31,7 +28,12 @@ #include "utils/guc.h" #include "utils/hsearch.h" #include "utils/memutils.h" -#include "common/hashfn.h" + +#include "distributed/coordinator_protocol.h" +#include "distributed/hash_helpers.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/worker_manager.h" /* Config variables managed via guc.c */ diff --git a/src/backend/distributed/operations/worker_shard_copy.c b/src/backend/distributed/operations/worker_shard_copy.c index ba65635a7..f99c9b537 100644 --- a/src/backend/distributed/operations/worker_shard_copy.c +++ b/src/backend/distributed/operations/worker_shard_copy.c @@ -8,23 +8,26 @@ *------------------------------------------------------------------------- */ -#include "libpq-fe.h" #include "postgres.h" + +#include "libpq-fe.h" + #include "commands/copy.h" #include "nodes/makefuncs.h" #include "parser/parse_relation.h" -#include "utils/lsyscache.h" #include "utils/builtins.h" -#include "distributed/remote_commands.h" -#include "distributed/worker_shard_copy.h" +#include "utils/lsyscache.h" + #include "distributed/commands/multi_copy.h" -#include "distributed/local_multi_copy.h" -#include "distributed/worker_manager.h" #include "distributed/connection_management.h" -#include "distributed/relation_utils.h" -#include "distributed/version_compat.h" #include "distributed/local_executor.h" +#include "distributed/local_multi_copy.h" +#include "distributed/relation_utils.h" +#include "distributed/remote_commands.h" #include "distributed/replication_origin_session_utils.h" +#include "distributed/version_compat.h" +#include "distributed/worker_manager.h" +#include "distributed/worker_shard_copy.h" /* * LocalCopyBuffer is used in copy callback to return the copied rows. diff --git a/src/backend/distributed/operations/worker_split_copy_udf.c b/src/backend/distributed/operations/worker_split_copy_udf.c index 18fdbfc4a..03354ea04 100644 --- a/src/backend/distributed/operations/worker_split_copy_udf.c +++ b/src/backend/distributed/operations/worker_split_copy_udf.c @@ -8,7 +8,13 @@ */ #include "postgres.h" + +#include "utils/array.h" +#include "utils/builtins.h" +#include "utils/lsyscache.h" + #include "pg_version_compat.h" + #include "distributed/citus_ruleutils.h" #include "distributed/distribution_column.h" #include "distributed/intermediate_results.h" @@ -16,9 +22,6 @@ #include "distributed/multi_executor.h" #include "distributed/utils/array_type.h" #include "distributed/worker_shard_copy.h" -#include "utils/lsyscache.h" -#include "utils/array.h" -#include "utils/builtins.h" PG_FUNCTION_INFO_V1(worker_split_copy); diff --git a/src/backend/distributed/operations/worker_split_shard_release_dsm_udf.c b/src/backend/distributed/operations/worker_split_shard_release_dsm_udf.c index 94ce40cdb..7f3f3ff7a 100644 --- a/src/backend/distributed/operations/worker_split_shard_release_dsm_udf.c +++ b/src/backend/distributed/operations/worker_split_shard_release_dsm_udf.c @@ -9,6 +9,7 @@ *------------------------------------------------------------------------- */ #include "postgres.h" + #include "distributed/shardinterval_utils.h" #include "distributed/shardsplit_shared_memory.h" diff --git a/src/backend/distributed/operations/worker_split_shard_replication_setup_udf.c b/src/backend/distributed/operations/worker_split_shard_replication_setup_udf.c index 4d116dfa1..d4775995c 100644 --- a/src/backend/distributed/operations/worker_split_shard_replication_setup_udf.c +++ b/src/backend/distributed/operations/worker_split_shard_replication_setup_udf.c @@ -9,24 +9,27 @@ *------------------------------------------------------------------------- */ #include "postgres.h" + #include "miscadmin.h" -#include "postmaster/postmaster.h" + +#include "commands/dbcommands.h" #include "common/hashfn.h" -#include "distributed/distribution_column.h" -#include "distributed/hash_helpers.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/shard_cleaner.h" -#include "distributed/shard_utils.h" -#include "distributed/shardsplit_shared_memory.h" -#include "distributed/connection_management.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/listutils.h" -#include "distributed/remote_commands.h" -#include "distributed/tuplestore.h" -#include "distributed/shardsplit_logical_replication.h" +#include "postmaster/postmaster.h" #include "utils/builtins.h" #include "utils/lsyscache.h" -#include "commands/dbcommands.h" + +#include "distributed/citus_safe_lib.h" +#include "distributed/connection_management.h" +#include "distributed/distribution_column.h" +#include "distributed/hash_helpers.h" +#include "distributed/listutils.h" +#include "distributed/remote_commands.h" +#include "distributed/shard_cleaner.h" +#include "distributed/shard_utils.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/shardsplit_logical_replication.h" +#include "distributed/shardsplit_shared_memory.h" +#include "distributed/tuplestore.h" /* declarations for dynamic loading */ diff --git a/src/backend/distributed/planner/combine_query_planner.c b/src/backend/distributed/planner/combine_query_planner.c index 6a171dac1..e3aa7b3e6 100644 --- a/src/backend/distributed/planner/combine_query_planner.c +++ b/src/backend/distributed/planner/combine_query_planner.c @@ -11,21 +11,22 @@ #include "postgres.h" -#include "pg_version_constants.h" - #include "catalog/pg_type.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/insert_select_planner.h" -#include "distributed/listutils.h" -#include "distributed/metadata_cache.h" -#include "distributed/combine_query_planner.h" -#include "distributed/multi_physical_planner.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" #include "optimizer/planner.h" #include "rewrite/rewriteManip.h" +#include "pg_version_constants.h" + +#include "distributed/citus_ruleutils.h" +#include "distributed/combine_query_planner.h" +#include "distributed/insert_select_planner.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_physical_planner.h" + static List * RemoteScanTargetList(List *workerTargetList); static PlannedStmt * BuildSelectStatementViaStdPlanner(Query *combineQuery, List *remoteScanTargetList, diff --git a/src/backend/distributed/planner/cte_inline.c b/src/backend/distributed/planner/cte_inline.c index 9a1bbab96..d6f88525c 100644 --- a/src/backend/distributed/planner/cte_inline.c +++ b/src/backend/distributed/planner/cte_inline.c @@ -12,13 +12,15 @@ *------------------------------------------------------------------------- */ #include "postgres.h" + +#include "nodes/nodeFuncs.h" +#include "optimizer/optimizer.h" +#include "rewrite/rewriteManip.h" + #include "pg_version_compat.h" #include "pg_version_constants.h" #include "distributed/cte_inline.h" -#include "nodes/nodeFuncs.h" -#include "optimizer/optimizer.h" -#include "rewrite/rewriteManip.h" typedef struct inline_cte_walker_context { diff --git a/src/backend/distributed/planner/deparse_shard_query.c b/src/backend/distributed/planner/deparse_shard_query.c index ac37b1399..43b5f1493 100644 --- a/src/backend/distributed/planner/deparse_shard_query.c +++ b/src/backend/distributed/planner/deparse_shard_query.c @@ -10,11 +10,24 @@ */ #include "postgres.h" + #include "c.h" #include "access/heapam.h" #include "access/htup_details.h" #include "catalog/pg_constraint.h" +#include "lib/stringinfo.h" +#include "nodes/makefuncs.h" +#include "nodes/nodeFuncs.h" +#include "nodes/nodes.h" +#include "nodes/parsenodes.h" +#include "nodes/pg_list.h" +#include "parser/parsetree.h" +#include "storage/lock.h" +#include "utils/lsyscache.h" +#include "utils/rel.h" +#include "utils/syscache.h" + #include "distributed/citus_nodefuncs.h" #include "distributed/citus_ruleutils.h" #include "distributed/combine_query_planner.h" @@ -28,17 +41,6 @@ #include "distributed/shard_utils.h" #include "distributed/utils/citus_stat_tenants.h" #include "distributed/version_compat.h" -#include "lib/stringinfo.h" -#include "nodes/makefuncs.h" -#include "nodes/nodeFuncs.h" -#include "nodes/nodes.h" -#include "nodes/parsenodes.h" -#include "nodes/pg_list.h" -#include "parser/parsetree.h" -#include "storage/lock.h" -#include "utils/lsyscache.h" -#include "utils/rel.h" -#include "utils/syscache.h" static void UpdateTaskQueryString(Query *query, Task *task); diff --git a/src/backend/distributed/planner/distributed_planner.c b/src/backend/distributed/planner/distributed_planner.c index 7ad419f0a..1d6550afd 100644 --- a/src/backend/distributed/planner/distributed_planner.c +++ b/src/backend/distributed/planner/distributed_planner.c @@ -7,71 +7,73 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" - -#include "pg_version_constants.h" - -#include "funcapi.h" - #include #include +#include "postgres.h" + +#include "funcapi.h" + #include "access/htup_details.h" #include "access/xact.h" #include "catalog/pg_class.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" -#include "distributed/citus_depended_object.h" -#include "distributed/citus_nodefuncs.h" -#include "distributed/citus_nodes.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/colocation_utils.h" -#include "distributed/commands.h" -#include "distributed/cte_inline.h" -#include "distributed/function_call_delegation.h" -#include "distributed/insert_select_planner.h" -#include "distributed/intermediate_result_pruning.h" -#include "distributed/intermediate_results.h" -#include "distributed/listutils.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/merge_planner.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_executor.h" -#include "distributed/distributed_planner.h" -#include "distributed/query_pushdown_planning.h" -#include "distributed/multi_logical_optimizer.h" -#include "distributed/multi_logical_planner.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/combine_query_planner.h" -#include "distributed/multi_router_planner.h" -#include "distributed/query_utils.h" -#include "distributed/recursive_planning.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/shard_utils.h" -#include "distributed/utils/citus_stat_tenants.h" -#include "distributed/version_compat.h" -#include "distributed/worker_shard_visibility.h" #include "executor/executor.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "nodes/pg_list.h" -#if PG_VERSION_NUM >= PG_VERSION_16 -#include "parser/parse_relation.h" -#endif -#include "parser/parsetree.h" -#include "parser/parse_type.h" #include "optimizer/optimizer.h" -#include "optimizer/plancat.h" #include "optimizer/pathnode.h" -#include "optimizer/planner.h" +#include "optimizer/plancat.h" #include "optimizer/planmain.h" +#include "optimizer/planner.h" +#include "parser/parse_type.h" +#include "parser/parsetree.h" #include "utils/builtins.h" #include "utils/datum.h" #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/syscache.h" +#include "pg_version_constants.h" + +#include "distributed/citus_depended_object.h" +#include "distributed/citus_nodefuncs.h" +#include "distributed/citus_nodes.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/colocation_utils.h" +#include "distributed/combine_query_planner.h" +#include "distributed/commands.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/cte_inline.h" +#include "distributed/distributed_planner.h" +#include "distributed/function_call_delegation.h" +#include "distributed/insert_select_planner.h" +#include "distributed/intermediate_result_pruning.h" +#include "distributed/intermediate_results.h" +#include "distributed/listutils.h" +#include "distributed/merge_planner.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_logical_optimizer.h" +#include "distributed/multi_logical_planner.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/multi_router_planner.h" +#include "distributed/query_pushdown_planning.h" +#include "distributed/query_utils.h" +#include "distributed/recursive_planning.h" +#include "distributed/shard_utils.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/utils/citus_stat_tenants.h" +#include "distributed/version_compat.h" +#include "distributed/worker_shard_visibility.h" + +#if PG_VERSION_NUM >= PG_VERSION_16 +#include "parser/parse_relation.h" +#endif + /* RouterPlanType is used to determine the router plan to invoke */ typedef enum RouterPlanType diff --git a/src/backend/distributed/planner/extended_op_node_utils.c b/src/backend/distributed/planner/extended_op_node_utils.c index bb87b6949..7912de1d9 100644 --- a/src/backend/distributed/planner/extended_op_node_utils.c +++ b/src/backend/distributed/planner/extended_op_node_utils.c @@ -9,6 +9,12 @@ */ #include "postgres.h" + +#include "nodes/nodeFuncs.h" +#include "nodes/pg_list.h" +#include "optimizer/optimizer.h" +#include "optimizer/restrictinfo.h" + #include "pg_version_constants.h" #include "distributed/extended_op_node_utils.h" @@ -16,10 +22,6 @@ #include "distributed/metadata_cache.h" #include "distributed/multi_logical_optimizer.h" #include "distributed/pg_dist_partition.h" -#include "optimizer/optimizer.h" -#include "optimizer/restrictinfo.h" -#include "nodes/nodeFuncs.h" -#include "nodes/pg_list.h" static bool GroupedByPartitionColumn(MultiNode *node, MultiExtendedOp *opNode); diff --git a/src/backend/distributed/planner/fast_path_router_planner.c b/src/backend/distributed/planner/fast_path_router_planner.c index 1d58911eb..531075f9e 100644 --- a/src/backend/distributed/planner/fast_path_router_planner.c +++ b/src/backend/distributed/planner/fast_path_router_planner.c @@ -34,16 +34,6 @@ */ #include "postgres.h" -#include "pg_version_constants.h" - -#include "distributed/distributed_planner.h" -#include "distributed/insert_select_planner.h" -#include "distributed/multi_physical_planner.h" /* only to use some utility functions */ -#include "distributed/metadata_cache.h" -#include "distributed/multi_router_planner.h" -#include "distributed/pg_dist_partition.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/shard_pruning.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "nodes/parsenodes.h" @@ -51,6 +41,17 @@ #include "optimizer/optimizer.h" #include "tcop/pquery.h" +#include "pg_version_constants.h" + +#include "distributed/distributed_planner.h" +#include "distributed/insert_select_planner.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_physical_planner.h" /* only to use some utility functions */ +#include "distributed/multi_router_planner.h" +#include "distributed/pg_dist_partition.h" +#include "distributed/shard_pruning.h" +#include "distributed/shardinterval_utils.h" + bool EnableFastPathRouterPlanner = true; static bool ColumnAppearsMultipleTimes(Node *quals, Var *distributionKey); diff --git a/src/backend/distributed/planner/function_call_delegation.c b/src/backend/distributed/planner/function_call_delegation.c index bacbe16af..f17b02347 100644 --- a/src/backend/distributed/planner/function_call_delegation.c +++ b/src/backend/distributed/planner/function_call_delegation.c @@ -12,32 +12,11 @@ #include "postgres.h" -#include "pg_version_constants.h" +#include "miscadmin.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" #include "commands/defrem.h" -#include "distributed/backend_data.h" -#include "distributed/metadata_utility.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/colocation_utils.h" -#include "distributed/commands.h" -#include "distributed/commands/multi_copy.h" -#include "distributed/connection_management.h" -#include "distributed/deparse_shard_query.h" -#include "distributed/function_call_delegation.h" -#include "distributed/insert_select_planner.h" -#include "distributed/citus_custom_scan.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/listutils.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/remote_commands.h" -#include "distributed/shard_pruning.h" -#include "distributed/recursive_planning.h" -#include "distributed/version_compat.h" -#include "distributed/worker_manager.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "nodes/parsenodes.h" @@ -46,11 +25,34 @@ #include "optimizer/clauses.h" #include "parser/parse_coerce.h" #include "parser/parsetree.h" -#include "miscadmin.h" #include "tcop/dest.h" #include "utils/lsyscache.h" #include "utils/syscache.h" +#include "pg_version_constants.h" + +#include "distributed/backend_data.h" +#include "distributed/citus_custom_scan.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/colocation_utils.h" +#include "distributed/commands.h" +#include "distributed/commands/multi_copy.h" +#include "distributed/connection_management.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/deparse_shard_query.h" +#include "distributed/function_call_delegation.h" +#include "distributed/insert_select_planner.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/recursive_planning.h" +#include "distributed/remote_commands.h" +#include "distributed/shard_pruning.h" +#include "distributed/version_compat.h" +#include "distributed/worker_manager.h" + struct ParamWalkerContext { bool hasParam; diff --git a/src/backend/distributed/planner/insert_select_planner.c b/src/backend/distributed/planner/insert_select_planner.c index dd4bee90f..60d6ce466 100644 --- a/src/backend/distributed/planner/insert_select_planner.c +++ b/src/backend/distributed/planner/insert_select_planner.c @@ -10,22 +10,39 @@ #include "postgres.h" -#include "pg_version_constants.h" - #include "catalog/pg_class.h" #include "catalog/pg_type.h" +#include "nodes/makefuncs.h" +#include "nodes/nodeFuncs.h" +#include "nodes/parsenodes.h" +#include "nodes/print.h" +#include "optimizer/clauses.h" +#include "optimizer/optimizer.h" +#include "optimizer/planner.h" +#include "optimizer/restrictinfo.h" +#include "optimizer/tlist.h" +#include "parser/parse_coerce.h" +#include "parser/parse_relation.h" +#include "parser/parsetree.h" +#include "tcop/tcopprot.h" +#include "utils/builtins.h" +#include "utils/lsyscache.h" +#include "utils/rel.h" + +#include "pg_version_constants.h" + #include "distributed/citus_clauses.h" #include "distributed/citus_ruleutils.h" #include "distributed/colocation_utils.h" #include "distributed/errormessage.h" -#include "distributed/listutils.h" -#include "distributed/log_utils.h" #include "distributed/insert_select_executor.h" #include "distributed/insert_select_planner.h" +#include "distributed/listutils.h" +#include "distributed/log_utils.h" #include "distributed/metadata_cache.h" #include "distributed/multi_executor.h" -#include "distributed/multi_logical_planner.h" #include "distributed/multi_logical_optimizer.h" +#include "distributed/multi_logical_planner.h" #include "distributed/multi_physical_planner.h" #include "distributed/multi_router_planner.h" #include "distributed/pg_dist_partition.h" @@ -34,22 +51,6 @@ #include "distributed/repartition_executor.h" #include "distributed/resource_lock.h" #include "distributed/version_compat.h" -#include "nodes/makefuncs.h" -#include "nodes/nodeFuncs.h" -#include "nodes/parsenodes.h" -#include "optimizer/clauses.h" -#include "optimizer/planner.h" -#include "optimizer/restrictinfo.h" -#include "optimizer/tlist.h" -#include "optimizer/optimizer.h" -#include "parser/parsetree.h" -#include "parser/parse_coerce.h" -#include "parser/parse_relation.h" -#include "tcop/tcopprot.h" -#include "utils/builtins.h" -#include "utils/lsyscache.h" -#include "utils/rel.h" -#include static void PrepareInsertSelectForCitusPlanner(Query *insertSelectQuery); diff --git a/src/backend/distributed/planner/intermediate_result_pruning.c b/src/backend/distributed/planner/intermediate_result_pruning.c index cefbfb833..5c9ee6c43 100644 --- a/src/backend/distributed/planner/intermediate_result_pruning.c +++ b/src/backend/distributed/planner/intermediate_result_pruning.c @@ -11,6 +11,10 @@ * *------------------------------------------------------------------------- */ +#include "postgres.h" + +#include "common/hashfn.h" +#include "utils/builtins.h" #include "distributed/citus_custom_scan.h" #include "distributed/citus_ruleutils.h" @@ -20,8 +24,6 @@ #include "distributed/metadata_cache.h" #include "distributed/query_utils.h" #include "distributed/worker_manager.h" -#include "utils/builtins.h" -#include "common/hashfn.h" /* controlled via GUC, used mostly for testing */ bool LogIntermediateResults = false; diff --git a/src/backend/distributed/planner/local_distributed_join_planner.c b/src/backend/distributed/planner/local_distributed_join_planner.c index 1867a790c..a6502bf43 100644 --- a/src/backend/distributed/planner/local_distributed_join_planner.c +++ b/src/backend/distributed/planner/local_distributed_join_planner.c @@ -71,55 +71,53 @@ #include "postgres.h" -#include "pg_version_constants.h" - #include "funcapi.h" -#include "catalog/pg_type.h" #include "catalog/pg_class.h" #include "catalog/pg_index.h" -#include "distributed/citus_nodes.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/commands.h" -#include "distributed/commands/multi_copy.h" -#include "distributed/distributed_planner.h" -#include "distributed/errormessage.h" -#include "distributed/local_distributed_join_planner.h" -#include "distributed/listutils.h" -#include "distributed/log_utils.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_logical_planner.h" -#include "distributed/multi_logical_optimizer.h" -#include "distributed/multi_router_planner.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/multi_server_executor.h" -#include "distributed/multi_router_planner.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/query_colocation_checker.h" -#include "distributed/query_pushdown_planning.h" -#include "distributed/recursive_planning.h" -#include "distributed/relation_restriction_equivalence.h" -#include "distributed/log_utils.h" -#include "distributed/shard_pruning.h" -#include "distributed/version_compat.h" +#include "catalog/pg_type.h" #include "lib/stringinfo.h" +#include "nodes/makefuncs.h" +#include "nodes/nodeFuncs.h" +#include "nodes/nodes.h" +#include "nodes/pathnodes.h" +#include "nodes/pg_list.h" +#include "nodes/primnodes.h" #include "optimizer/clauses.h" #include "optimizer/optimizer.h" #include "optimizer/planner.h" #include "optimizer/prep.h" #include "parser/parse_relation.h" #include "parser/parsetree.h" -#include "nodes/makefuncs.h" -#include "nodes/nodeFuncs.h" -#include "nodes/nodes.h" -#include "nodes/nodeFuncs.h" -#include "nodes/pg_list.h" -#include "nodes/primnodes.h" -#include "nodes/pathnodes.h" #include "utils/builtins.h" #include "utils/guc.h" #include "utils/lsyscache.h" +#include "pg_version_constants.h" + +#include "distributed/citus_nodes.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/commands.h" +#include "distributed/commands/multi_copy.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/distributed_planner.h" +#include "distributed/errormessage.h" +#include "distributed/listutils.h" +#include "distributed/local_distributed_join_planner.h" +#include "distributed/log_utils.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_logical_optimizer.h" +#include "distributed/multi_logical_planner.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/multi_router_planner.h" +#include "distributed/multi_server_executor.h" +#include "distributed/query_colocation_checker.h" +#include "distributed/query_pushdown_planning.h" +#include "distributed/recursive_planning.h" +#include "distributed/relation_restriction_equivalence.h" +#include "distributed/shard_pruning.h" +#include "distributed/version_compat.h" + #define INVALID_RTE_IDENTITY -1 /* diff --git a/src/backend/distributed/planner/local_plan_cache.c b/src/backend/distributed/planner/local_plan_cache.c index 1ac8e24a3..2e5ca4e55 100644 --- a/src/backend/distributed/planner/local_plan_cache.c +++ b/src/backend/distributed/planner/local_plan_cache.c @@ -9,19 +9,20 @@ */ #include "postgres.h" +#include "optimizer/clauses.h" +#include "optimizer/optimizer.h" + #include "pg_version_constants.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/deparse_shard_query.h" +#include "distributed/insert_select_planner.h" #include "distributed/listutils.h" #include "distributed/local_executor.h" #include "distributed/local_plan_cache.h" -#include "distributed/deparse_shard_query.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/insert_select_planner.h" #include "distributed/metadata_cache.h" #include "distributed/multi_executor.h" #include "distributed/version_compat.h" -#include "optimizer/optimizer.h" -#include "optimizer/clauses.h" static Query * GetLocalShardQueryForCache(Query *jobQuery, Task *task, diff --git a/src/backend/distributed/planner/merge_planner.c b/src/backend/distributed/planner/merge_planner.c index 5c593d153..4d64b8f56 100644 --- a/src/backend/distributed/planner/merge_planner.c +++ b/src/backend/distributed/planner/merge_planner.c @@ -12,6 +12,7 @@ #include #include "postgres.h" + #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "optimizer/optimizer.h" @@ -20,6 +21,8 @@ #include "tcop/tcopprot.h" #include "utils/lsyscache.h" +#include "pg_version_constants.h" + #include "distributed/citus_clauses.h" #include "distributed/citus_custom_scan.h" #include "distributed/insert_select_planner.h" @@ -29,12 +32,11 @@ #include "distributed/multi_logical_optimizer.h" #include "distributed/multi_router_planner.h" #include "distributed/pg_dist_node_metadata.h" -#include "pg_version_constants.h" -#include "distributed/query_pushdown_planning.h" #include "distributed/query_colocation_checker.h" +#include "distributed/query_pushdown_planning.h" #include "distributed/repartition_executor.h" -#include "distributed/shared_library_init.h" #include "distributed/shard_pruning.h" +#include "distributed/shared_library_init.h" #if PG_VERSION_NUM >= PG_VERSION_15 diff --git a/src/backend/distributed/planner/multi_explain.c b/src/backend/distributed/planner/multi_explain.c index bf9a1871e..1d6a88934 100644 --- a/src/backend/distributed/planner/multi_explain.c +++ b/src/backend/distributed/planner/multi_explain.c @@ -8,11 +8,11 @@ */ #include "postgres.h" + +#include "fmgr.h" #include "libpq-fe.h" #include "miscadmin.h" -#include "pg_version_constants.h" - #include "access/htup_details.h" #include "access/xact.h" #include "catalog/namespace.h" @@ -24,41 +24,13 @@ #include "commands/dbcommands.h" #include "commands/explain.h" #include "commands/tablecmds.h" -#include "optimizer/cost.h" -#include "distributed/citus_depended_object.h" -#include "distributed/citus_nodefuncs.h" -#include "distributed/connection_management.h" -#include "distributed/deparse_shard_query.h" -#include "distributed/executor_util.h" -#include "distributed/insert_select_planner.h" -#include "distributed/insert_select_executor.h" -#include "distributed/listutils.h" -#include "distributed/merge_planner.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_explain.h" -#include "distributed/multi_logical_optimizer.h" -#include "distributed/multi_logical_planner.h" -#include "distributed/combine_query_planner.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/multi_router_planner.h" -#include "distributed/distributed_planner.h" -#include "distributed/multi_server_executor.h" -#include "distributed/remote_commands.h" -#include "distributed/recursive_planning.h" -#include "distributed/placement_connection.h" -#include "distributed/tuple_destination.h" -#include "distributed/tuplestore.h" -#include "distributed/worker_protocol.h" -#include "distributed/version_compat.h" -#include "distributed/jsonbutils.h" -#include "distributed/commands/utility_hook.h" #include "executor/tstoreReceiver.h" -#include "fmgr.h" #include "lib/stringinfo.h" #include "nodes/plannodes.h" #include "nodes/primnodes.h" #include "nodes/print.h" #include "optimizer/clauses.h" +#include "optimizer/cost.h" #include "optimizer/planner.h" #include "parser/analyze.h" #include "portability/instr_time.h" @@ -71,6 +43,36 @@ #include "utils/lsyscache.h" #include "utils/snapmgr.h" +#include "pg_version_constants.h" + +#include "distributed/citus_depended_object.h" +#include "distributed/citus_nodefuncs.h" +#include "distributed/combine_query_planner.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/connection_management.h" +#include "distributed/deparse_shard_query.h" +#include "distributed/distributed_planner.h" +#include "distributed/executor_util.h" +#include "distributed/insert_select_executor.h" +#include "distributed/insert_select_planner.h" +#include "distributed/jsonbutils.h" +#include "distributed/listutils.h" +#include "distributed/merge_planner.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_explain.h" +#include "distributed/multi_logical_optimizer.h" +#include "distributed/multi_logical_planner.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/multi_router_planner.h" +#include "distributed/multi_server_executor.h" +#include "distributed/placement_connection.h" +#include "distributed/recursive_planning.h" +#include "distributed/remote_commands.h" +#include "distributed/tuple_destination.h" +#include "distributed/tuplestore.h" +#include "distributed/version_compat.h" +#include "distributed/worker_protocol.h" + /* Config variables that enable printing distributed query plans */ bool ExplainDistributedQueries = true; diff --git a/src/backend/distributed/planner/multi_join_order.c b/src/backend/distributed/planner/multi_join_order.c index 0eede6b9b..908ed206e 100644 --- a/src/backend/distributed/planner/multi_join_order.c +++ b/src/backend/distributed/planner/multi_join_order.c @@ -11,31 +11,31 @@ *------------------------------------------------------------------------- */ +#include + #include "postgres.h" +#include "access/heapam.h" +#include "access/htup_details.h" +#include "access/nbtree.h" +#include "catalog/pg_am.h" +#include "lib/stringinfo.h" +#include "nodes/nodeFuncs.h" +#include "optimizer/optimizer.h" +#include "utils/builtins.h" +#include "utils/datum.h" +#include "utils/lsyscache.h" +#include "utils/rel.h" +#include "utils/syscache.h" + #include "pg_version_constants.h" -#include - -#include "access/nbtree.h" -#include "access/heapam.h" -#include "access/htup_details.h" -#include "catalog/pg_am.h" #include "distributed/listutils.h" #include "distributed/metadata_cache.h" #include "distributed/multi_join_order.h" #include "distributed/multi_physical_planner.h" #include "distributed/pg_dist_partition.h" #include "distributed/worker_protocol.h" -#include "lib/stringinfo.h" -#include "optimizer/optimizer.h" -#include "utils/builtins.h" -#include "nodes/nodeFuncs.h" -#include "utils/builtins.h" -#include "utils/datum.h" -#include "utils/lsyscache.h" -#include "utils/rel.h" -#include "utils/syscache.h" /* Config variables managed via guc.c */ diff --git a/src/backend/distributed/planner/multi_logical_optimizer.c b/src/backend/distributed/planner/multi_logical_optimizer.c index 9001d724d..76e38237a 100644 --- a/src/backend/distributed/planner/multi_logical_optimizer.c +++ b/src/backend/distributed/planner/multi_logical_optimizer.c @@ -11,12 +11,10 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" - -#include "pg_version_constants.h" - #include +#include "postgres.h" + #include "access/genam.h" #include "access/heapam.h" #include "access/htup_details.h" @@ -27,6 +25,23 @@ #include "catalog/pg_proc.h" #include "catalog/pg_type.h" #include "commands/extension.h" +#include "nodes/makefuncs.h" +#include "nodes/nodeFuncs.h" +#include "optimizer/clauses.h" +#include "optimizer/optimizer.h" +#include "optimizer/tlist.h" +#include "parser/parse_agg.h" +#include "parser/parse_coerce.h" +#include "parser/parse_oper.h" +#include "parser/parsetree.h" +#include "rewrite/rewriteManip.h" +#include "utils/fmgroids.h" +#include "utils/lsyscache.h" +#include "utils/rel.h" +#include "utils/syscache.h" + +#include "pg_version_constants.h" + #include "distributed/citus_nodes.h" #include "distributed/citus_ruleutils.h" #include "distributed/colocation_utils.h" @@ -42,22 +57,8 @@ #include "distributed/query_pushdown_planning.h" #include "distributed/string_utils.h" #include "distributed/tdigest_extension.h" -#include "distributed/worker_protocol.h" #include "distributed/version_compat.h" -#include "nodes/makefuncs.h" -#include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/tlist.h" -#include "optimizer/optimizer.h" -#include "parser/parse_agg.h" -#include "parser/parse_coerce.h" -#include "parser/parse_oper.h" -#include "parser/parsetree.h" -#include "rewrite/rewriteManip.h" -#include "utils/fmgroids.h" -#include "utils/lsyscache.h" -#include "utils/rel.h" -#include "utils/syscache.h" +#include "distributed/worker_protocol.h" /* Config variable managed via guc.c */ int LimitClauseRowFetchCount = -1; /* number of rows to fetch from each task */ diff --git a/src/backend/distributed/planner/multi_logical_planner.c b/src/backend/distributed/planner/multi_logical_planner.c index d6897d17b..f62e309f2 100644 --- a/src/backend/distributed/planner/multi_logical_planner.c +++ b/src/backend/distributed/planner/multi_logical_planner.c @@ -14,42 +14,43 @@ #include "postgres.h" -#include "pg_version_constants.h" - #include "access/heapam.h" #include "access/nbtree.h" #include "catalog/pg_am.h" #include "catalog/pg_class.h" #include "commands/defrem.h" -#include "distributed/citus_clauses.h" -#include "distributed/colocation_utils.h" -#include "distributed/metadata_cache.h" -#include "distributed/insert_select_planner.h" -#include "distributed/listutils.h" -#include "distributed/multi_logical_optimizer.h" -#include "distributed/multi_logical_planner.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/reference_table_utils.h" -#include "distributed/relation_restriction_equivalence.h" -#include "distributed/query_pushdown_planning.h" -#include "distributed/query_utils.h" -#include "distributed/multi_router_planner.h" -#include "distributed/worker_protocol.h" -#include "distributed/version_compat.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "nodes/pathnodes.h" -#include "optimizer/optimizer.h" #include "optimizer/clauses.h" +#include "optimizer/optimizer.h" #include "optimizer/prep.h" #include "optimizer/tlist.h" #include "parser/parsetree.h" #include "utils/builtins.h" #include "utils/datum.h" #include "utils/lsyscache.h" -#include "utils/syscache.h" #include "utils/rel.h" #include "utils/relcache.h" +#include "utils/syscache.h" + +#include "pg_version_constants.h" + +#include "distributed/citus_clauses.h" +#include "distributed/colocation_utils.h" +#include "distributed/insert_select_planner.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_logical_optimizer.h" +#include "distributed/multi_logical_planner.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/multi_router_planner.h" +#include "distributed/query_pushdown_planning.h" +#include "distributed/query_utils.h" +#include "distributed/reference_table_utils.h" +#include "distributed/relation_restriction_equivalence.h" +#include "distributed/version_compat.h" +#include "distributed/worker_protocol.h" /* Struct to differentiate different qualifier types in an expression tree walker */ diff --git a/src/backend/distributed/planner/multi_physical_planner.c b/src/backend/distributed/planner/multi_physical_planner.c index aa2c2b5b4..fb7f844c7 100644 --- a/src/backend/distributed/planner/multi_physical_planner.c +++ b/src/backend/distributed/planner/multi_physical_planner.c @@ -11,13 +11,11 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" - -#include "pg_version_constants.h" - #include #include +#include "postgres.h" + #include "miscadmin.h" #include "access/genam.h" @@ -33,39 +31,11 @@ #include "catalog/pg_type.h" #include "commands/defrem.h" #include "commands/sequence.h" -#include "distributed/backend_data.h" -#include "distributed/listutils.h" -#include "distributed/citus_nodefuncs.h" -#include "distributed/citus_nodes.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/colocation_utils.h" -#include "distributed/deparse_shard_query.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/intermediate_results.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_router_planner.h" -#include "distributed/multi_join_order.h" -#include "distributed/multi_logical_optimizer.h" -#include "distributed/multi_logical_planner.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/log_utils.h" -#include "distributed/pg_dist_partition.h" -#include "distributed/pg_dist_shard.h" -#include "distributed/query_pushdown_planning.h" -#include "distributed/query_utils.h" -#include "distributed/recursive_planning.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/shard_pruning.h" -#include "distributed/string_utils.h" -#include "distributed/worker_manager.h" -#include "distributed/worker_protocol.h" -#include "distributed/version_compat.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" +#include "nodes/pathnodes.h" #include "nodes/print.h" #include "optimizer/clauses.h" -#include "nodes/pathnodes.h" #include "optimizer/optimizer.h" #include "optimizer/restrictinfo.h" #include "optimizer/tlist.h" @@ -84,6 +54,37 @@ #include "utils/syscache.h" #include "utils/typcache.h" +#include "pg_version_constants.h" + +#include "distributed/backend_data.h" +#include "distributed/citus_nodefuncs.h" +#include "distributed/citus_nodes.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/colocation_utils.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/deparse_shard_query.h" +#include "distributed/intermediate_results.h" +#include "distributed/listutils.h" +#include "distributed/log_utils.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_join_order.h" +#include "distributed/multi_logical_optimizer.h" +#include "distributed/multi_logical_planner.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/multi_router_planner.h" +#include "distributed/pg_dist_partition.h" +#include "distributed/pg_dist_shard.h" +#include "distributed/query_pushdown_planning.h" +#include "distributed/query_utils.h" +#include "distributed/recursive_planning.h" +#include "distributed/shard_pruning.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/string_utils.h" +#include "distributed/version_compat.h" +#include "distributed/worker_manager.h" +#include "distributed/worker_protocol.h" + /* RepartitionJoinBucketCountPerNode determines bucket amount during repartitions */ int RepartitionJoinBucketCountPerNode = 4; diff --git a/src/backend/distributed/planner/multi_router_planner.c b/src/backend/distributed/planner/multi_router_planner.c index c0930ca34..620d506a0 100644 --- a/src/backend/distributed/planner/multi_router_planner.c +++ b/src/backend/distributed/planner/multi_router_planner.c @@ -11,50 +11,15 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" - -#include "pg_version_constants.h" - #include +#include "postgres.h" + #include "access/stratnum.h" #include "access/xact.h" #include "catalog/pg_opfamily.h" +#include "catalog/pg_proc.h" #include "catalog/pg_type.h" -#include "distributed/colocation_utils.h" -#include "distributed/citus_clauses.h" -#include "distributed/citus_nodes.h" -#include "distributed/citus_nodefuncs.h" -#include "distributed/deparse_shard_query.h" -#include "distributed/distribution_column.h" -#include "distributed/errormessage.h" -#include "distributed/executor_util.h" -#include "distributed/log_utils.h" -#include "distributed/insert_select_planner.h" -#include "distributed/intermediate_result_pruning.h" -#include "distributed/metadata_utility.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/merge_planner.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_join_order.h" -#include "distributed/multi_logical_planner.h" -#include "distributed/multi_logical_optimizer.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/multi_router_planner.h" -#include "distributed/multi_server_executor.h" -#include "distributed/listutils.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/query_pushdown_planning.h" -#include "distributed/query_utils.h" -#include "distributed/reference_table_utils.h" -#include "distributed/relation_restriction_equivalence.h" -#include "distributed/relay_utility.h" -#include "distributed/recursive_planning.h" -#include "distributed/resource_lock.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/shard_pruning.h" #include "executor/execdesc.h" #include "lib/stringinfo.h" #include "nodes/makefuncs.h" @@ -65,12 +30,13 @@ #include "nodes/primnodes.h" #include "optimizer/clauses.h" #include "optimizer/joininfo.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" -#include "optimizer/optimizer.h" +#include "optimizer/planmain.h" #include "optimizer/restrictinfo.h" -#include "parser/parsetree.h" #include "parser/parse_oper.h" +#include "parser/parsetree.h" #include "postmaster/postmaster.h" #include "storage/lock.h" #include "utils/builtins.h" @@ -80,8 +46,42 @@ #include "utils/rel.h" #include "utils/typcache.h" -#include "catalog/pg_proc.h" -#include "optimizer/planmain.h" +#include "pg_version_constants.h" + +#include "distributed/citus_clauses.h" +#include "distributed/citus_nodefuncs.h" +#include "distributed/citus_nodes.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/colocation_utils.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/deparse_shard_query.h" +#include "distributed/distribution_column.h" +#include "distributed/errormessage.h" +#include "distributed/executor_util.h" +#include "distributed/insert_select_planner.h" +#include "distributed/intermediate_result_pruning.h" +#include "distributed/listutils.h" +#include "distributed/log_utils.h" +#include "distributed/merge_planner.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_join_order.h" +#include "distributed/multi_logical_optimizer.h" +#include "distributed/multi_logical_planner.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/multi_router_planner.h" +#include "distributed/multi_server_executor.h" +#include "distributed/query_pushdown_planning.h" +#include "distributed/query_utils.h" +#include "distributed/recursive_planning.h" +#include "distributed/reference_table_utils.h" +#include "distributed/relation_restriction_equivalence.h" +#include "distributed/relay_utility.h" +#include "distributed/resource_lock.h" +#include "distributed/shard_pruning.h" +#include "distributed/shardinterval_utils.h" /* intermediate value for INSERT processing */ typedef struct InsertValues diff --git a/src/backend/distributed/planner/query_colocation_checker.c b/src/backend/distributed/planner/query_colocation_checker.c index fd1df1be9..827a0286c 100644 --- a/src/backend/distributed/planner/query_colocation_checker.c +++ b/src/backend/distributed/planner/query_colocation_checker.c @@ -21,26 +21,26 @@ #include "postgres.h" -#include "pg_version_constants.h" - #include "access/relation.h" -#include "distributed/multi_logical_planner.h" -#include "distributed/query_colocation_checker.h" -#include "distributed/pg_dist_partition.h" -#include "distributed/relation_restriction_equivalence.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_logical_planner.h" /* only to access utility functions */ - #include "catalog/pg_type.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "parser/parsetree.h" -#include "distributed/listutils.h" -#include "parser/parse_relation.h" #include "optimizer/planner.h" #include "optimizer/prep.h" +#include "parser/parse_relation.h" +#include "parser/parsetree.h" #include "utils/rel.h" +#include "pg_version_constants.h" + +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_logical_planner.h" +#include "distributed/multi_logical_planner.h" /* only to access utility functions */ +#include "distributed/pg_dist_partition.h" +#include "distributed/query_colocation_checker.h" +#include "distributed/relation_restriction_equivalence.h" + static RangeTblEntry * AnchorRte(Query *subquery); static List * UnionRelationRestrictionLists(List *firstRelationList, diff --git a/src/backend/distributed/planner/query_pushdown_planning.c b/src/backend/distributed/planner/query_pushdown_planning.c index 8ccc35c82..2eda4e42a 100644 --- a/src/backend/distributed/planner/query_pushdown_planning.c +++ b/src/backend/distributed/planner/query_pushdown_planning.c @@ -21,6 +21,13 @@ #include "postgres.h" +#include "nodes/makefuncs.h" +#include "nodes/nodeFuncs.h" +#include "nodes/pg_list.h" +#include "optimizer/clauses.h" +#include "optimizer/optimizer.h" +#include "parser/parsetree.h" + #include "pg_version_constants.h" #include "distributed/citus_clauses.h" @@ -32,17 +39,11 @@ #include "distributed/multi_logical_planner.h" #include "distributed/multi_router_planner.h" #include "distributed/pg_dist_partition.h" -#include "distributed/query_utils.h" #include "distributed/query_pushdown_planning.h" +#include "distributed/query_utils.h" #include "distributed/recursive_planning.h" #include "distributed/relation_restriction_equivalence.h" #include "distributed/version_compat.h" -#include "nodes/nodeFuncs.h" -#include "nodes/makefuncs.h" -#include "optimizer/optimizer.h" -#include "nodes/pg_list.h" -#include "optimizer/clauses.h" -#include "parser/parsetree.h" #define INVALID_RELID -1 diff --git a/src/backend/distributed/planner/recursive_planning.c b/src/backend/distributed/planner/recursive_planning.c index d16280662..6c42046ff 100644 --- a/src/backend/distributed/planner/recursive_planning.c +++ b/src/backend/distributed/planner/recursive_planning.c @@ -48,51 +48,50 @@ #include "postgres.h" -#include "pg_version_constants.h" - #include "funcapi.h" -#include "catalog/pg_type.h" #include "catalog/pg_class.h" -#include "distributed/citus_nodes.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/commands/multi_copy.h" -#include "distributed/distributed_planner.h" -#include "distributed/errormessage.h" -#include "distributed/local_distributed_join_planner.h" -#include "distributed/listutils.h" -#include "distributed/log_utils.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_logical_planner.h" -#include "distributed/multi_logical_optimizer.h" -#include "distributed/multi_router_planner.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/multi_server_executor.h" -#include "distributed/query_colocation_checker.h" -#include "distributed/query_pushdown_planning.h" -#include "distributed/recursive_planning.h" -#include "distributed/relation_restriction_equivalence.h" -#include "distributed/log_utils.h" -#include "distributed/shard_pruning.h" -#include "distributed/version_compat.h" +#include "catalog/pg_type.h" #include "lib/stringinfo.h" +#include "nodes/makefuncs.h" +#include "nodes/nodeFuncs.h" +#include "nodes/nodes.h" +#include "nodes/pathnodes.h" +#include "nodes/pg_list.h" +#include "nodes/primnodes.h" #include "optimizer/clauses.h" #include "optimizer/optimizer.h" #include "optimizer/planner.h" #include "optimizer/prep.h" #include "parser/parse_relation.h" #include "parser/parsetree.h" -#include "nodes/makefuncs.h" -#include "nodes/nodeFuncs.h" -#include "nodes/nodes.h" -#include "nodes/nodeFuncs.h" -#include "nodes/pg_list.h" -#include "nodes/primnodes.h" -#include "nodes/pathnodes.h" #include "utils/builtins.h" #include "utils/guc.h" #include "utils/lsyscache.h" +#include "pg_version_constants.h" + +#include "distributed/citus_nodes.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/commands/multi_copy.h" +#include "distributed/distributed_planner.h" +#include "distributed/errormessage.h" +#include "distributed/listutils.h" +#include "distributed/local_distributed_join_planner.h" +#include "distributed/log_utils.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_logical_optimizer.h" +#include "distributed/multi_logical_planner.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/multi_router_planner.h" +#include "distributed/multi_server_executor.h" +#include "distributed/query_colocation_checker.h" +#include "distributed/query_pushdown_planning.h" +#include "distributed/recursive_planning.h" +#include "distributed/relation_restriction_equivalence.h" +#include "distributed/shard_pruning.h" +#include "distributed/version_compat.h" + /* * RecursivePlanningContext is used to recursively plan subqueries * and CTEs, pull results to the coordinator, and push it back into diff --git a/src/backend/distributed/planner/relation_restriction_equivalence.c b/src/backend/distributed/planner/relation_restriction_equivalence.c index 4b51a537d..83d7cbcdb 100644 --- a/src/backend/distributed/planner/relation_restriction_equivalence.c +++ b/src/backend/distributed/planner/relation_restriction_equivalence.c @@ -10,31 +10,31 @@ */ #include "postgres.h" +#include "catalog/pg_type.h" +#include "nodes/makefuncs.h" +#include "nodes/nodeFuncs.h" +#include "nodes/pathnodes.h" +#include "nodes/pg_list.h" +#include "nodes/primnodes.h" +#include "optimizer/optimizer.h" +#include "optimizer/pathnode.h" +#include "optimizer/paths.h" +#include "parser/parsetree.h" + #include "pg_version_constants.h" #include "distributed/colocation_utils.h" #include "distributed/distributed_planner.h" #include "distributed/listutils.h" #include "distributed/metadata_cache.h" -#include "distributed/multi_logical_planner.h" #include "distributed/multi_logical_optimizer.h" +#include "distributed/multi_logical_planner.h" #include "distributed/multi_router_planner.h" #include "distributed/pg_dist_partition.h" #include "distributed/query_utils.h" #include "distributed/relation_restriction_equivalence.h" #include "distributed/shard_pruning.h" -#include "catalog/pg_type.h" -#include "nodes/nodeFuncs.h" -#include "nodes/pg_list.h" -#include "nodes/primnodes.h" -#include "nodes/pathnodes.h" -#include "optimizer/optimizer.h" -#include "nodes/makefuncs.h" -#include "optimizer/paths.h" -#include "parser/parsetree.h" -#include "optimizer/pathnode.h" - static uint32 AttributeEquivalenceId = 1; diff --git a/src/backend/distributed/planner/shard_pruning.c b/src/backend/distributed/planner/shard_pruning.c index ef244ea66..e68ac72b0 100644 --- a/src/backend/distributed/planner/shard_pruning.c +++ b/src/backend/distributed/planner/shard_pruning.c @@ -66,28 +66,14 @@ */ #include "postgres.h" -#include "pg_version_constants.h" - #include "fmgr.h" -#include "distributed/shard_pruning.h" - #include "access/nbtree.h" #include "catalog/pg_am.h" #include "catalog/pg_collation.h" #include "catalog/pg_type.h" -#include "distributed/distributed_planner.h" -#include "distributed/listutils.h" -#include "distributed/log_utils.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_join_order.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/pg_dist_partition.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/version_compat.h" -#include "distributed/worker_protocol.h" -#include "nodes/nodeFuncs.h" #include "nodes/makefuncs.h" +#include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" #include "optimizer/planner.h" #include "parser/parse_coerce.h" @@ -98,6 +84,20 @@ #include "utils/memutils.h" #include "utils/ruleutils.h" +#include "pg_version_constants.h" + +#include "distributed/distributed_planner.h" +#include "distributed/listutils.h" +#include "distributed/log_utils.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_join_order.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/pg_dist_partition.h" +#include "distributed/shard_pruning.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/version_compat.h" +#include "distributed/worker_protocol.h" + /* * Tree node for compact representation of the given query logical tree. diff --git a/src/backend/distributed/planner/tdigest_extension.c b/src/backend/distributed/planner/tdigest_extension.c index 123b170d4..3a3701940 100644 --- a/src/backend/distributed/planner/tdigest_extension.c +++ b/src/backend/distributed/planner/tdigest_extension.c @@ -12,13 +12,14 @@ #include "access/htup_details.h" #include "catalog/pg_extension.h" #include "catalog/pg_type.h" -#include "distributed/metadata_cache.h" -#include "distributed/tdigest_extension.h" -#include "distributed/version_compat.h" #include "parser/parse_func.h" #include "utils/fmgroids.h" #include "utils/lsyscache.h" +#include "distributed/metadata_cache.h" +#include "distributed/tdigest_extension.h" +#include "distributed/version_compat.h" + static Oid LookupTDigestFunction(const char *functionName, int argcount, Oid *argtypes); diff --git a/src/backend/distributed/progress/multi_progress.c b/src/backend/distributed/progress/multi_progress.c index 8a3adf4bc..64e0a5b47 100644 --- a/src/backend/distributed/progress/multi_progress.c +++ b/src/backend/distributed/progress/multi_progress.c @@ -8,15 +8,17 @@ */ #include "postgres.h" + #include "miscadmin.h" #include "pgstat.h" +#include "storage/dsm.h" +#include "utils/builtins.h" + #include "distributed/function_utils.h" #include "distributed/listutils.h" #include "distributed/multi_progress.h" #include "distributed/version_compat.h" -#include "storage/dsm.h" -#include "utils/builtins.h" /* dynamic shared memory handle of the current progress */ diff --git a/src/backend/distributed/relay/relay_event_utility.c b/src/backend/distributed/relay/relay_event_utility.c index 3284ead11..d0267025b 100644 --- a/src/backend/distributed/relay/relay_event_utility.c +++ b/src/backend/distributed/relay/relay_event_utility.c @@ -12,34 +12,28 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" -#include "c.h" - #include #include +#include "postgres.h" + +#include "c.h" + #include "access/genam.h" -#include "access/heapam.h" -#include "access/htup_details.h" #include "access/hash.h" +#include "access/heapam.h" #include "access/htup.h" +#include "access/htup_details.h" #include "access/skey.h" #include "access/stratnum.h" #include "catalog/indexing.h" #include "catalog/namespace.h" #include "catalog/pg_class.h" #include "catalog/pg_constraint.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/commands.h" -#include "distributed/listutils.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/relay_utility.h" -#include "distributed/version_compat.h" #include "lib/stringinfo.h" #include "mb/pg_wchar.h" -#include "nodes/nodes.h" #include "nodes/nodeFuncs.h" +#include "nodes/nodes.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "nodes/primnodes.h" @@ -53,6 +47,14 @@ #include "utils/palloc.h" #include "utils/relcache.h" +#include "distributed/citus_safe_lib.h" +#include "distributed/commands.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/relay_utility.h" +#include "distributed/version_compat.h" + /* Local functions forward declarations */ static void RelayEventExtendConstraintAndIndexNames(AlterTableStmt *alterTableStmt, Constraint *constraint, diff --git a/src/backend/distributed/replication/multi_logical_replication.c b/src/backend/distributed/replication/multi_logical_replication.c index 48571d7c4..056bc9a45 100644 --- a/src/backend/distributed/replication/multi_logical_replication.c +++ b/src/backend/distributed/replication/multi_logical_replication.c @@ -10,55 +10,32 @@ *------------------------------------------------------------------------- */ #include "postgres.h" -#include "miscadmin.h" -#include "fmgr.h" -#include "pgstat.h" -#include "libpq-fe.h" -#include "pg_version_constants.h" +#include "fmgr.h" +#include "libpq-fe.h" +#include "miscadmin.h" +#include "pgstat.h" #include "access/genam.h" - -#include "postmaster/interrupt.h" - #include "access/htup_details.h" #include "access/sysattr.h" #include "access/xact.h" -#include "commands/dbcommands.h" -#include "common/hashfn.h" -#include "catalog/pg_subscription_rel.h" #include "catalog/namespace.h" #include "catalog/pg_constraint.h" -#include "distributed/adaptive_executor.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/colocation_utils.h" -#include "distributed/connection_management.h" -#include "distributed/hash_helpers.h" -#include "distributed/listutils.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata_sync.h" -#include "distributed/multi_join_order.h" -#include "distributed/multi_logical_replication.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/priority.h" -#include "distributed/distributed_planner.h" -#include "distributed/remote_commands.h" -#include "distributed/resource_lock.h" -#include "distributed/shard_cleaner.h" -#include "distributed/shard_rebalancer.h" -#include "distributed/shard_transfer.h" -#include "distributed/version_compat.h" +#include "catalog/pg_subscription_rel.h" +#include "commands/dbcommands.h" +#include "common/hashfn.h" #include "nodes/bitmapset.h" #include "parser/scansup.h" +#include "postmaster/interrupt.h" #include "storage/ipc.h" #include "storage/latch.h" #include "storage/lock.h" -#include "utils/guc.h" #include "utils/builtins.h" -#include "utils/fmgrprotos.h" #include "utils/fmgroids.h" +#include "utils/fmgrprotos.h" #include "utils/formatting.h" +#include "utils/guc.h" #include "utils/inval.h" #include "utils/lsyscache.h" #include "utils/pg_lsn.h" @@ -66,6 +43,29 @@ #include "utils/ruleutils.h" #include "utils/syscache.h" +#include "pg_version_constants.h" + +#include "distributed/adaptive_executor.h" +#include "distributed/citus_safe_lib.h" +#include "distributed/colocation_utils.h" +#include "distributed/connection_management.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/distributed_planner.h" +#include "distributed/hash_helpers.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_sync.h" +#include "distributed/multi_join_order.h" +#include "distributed/multi_logical_replication.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/priority.h" +#include "distributed/remote_commands.h" +#include "distributed/resource_lock.h" +#include "distributed/shard_cleaner.h" +#include "distributed/shard_rebalancer.h" +#include "distributed/shard_transfer.h" +#include "distributed/version_compat.h" + #define CURRENT_LOG_POSITION_COMMAND "SELECT pg_current_wal_lsn()" /* decimal representation of Adler-16 hash value of citus_shard_move_publication */ diff --git a/src/backend/distributed/shardsplit/shardsplit_decoder.c b/src/backend/distributed/shardsplit/shardsplit_decoder.c index 7145b4dfa..f14f10557 100644 --- a/src/backend/distributed/shardsplit/shardsplit_decoder.c +++ b/src/backend/distributed/shardsplit/shardsplit_decoder.c @@ -8,16 +8,18 @@ *------------------------------------------------------------------------- */ #include "postgres.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/shardsplit_shared_memory.h" -#include "distributed/worker_shard_visibility.h" -#include "distributed/worker_protocol.h" + +#include "catalog/pg_namespace.h" +#include "replication/logical.h" +#include "utils/lsyscache.h" +#include "utils/typcache.h" + #include "distributed/listutils.h" #include "distributed/metadata/distobject.h" -#include "replication/logical.h" -#include "utils/typcache.h" -#include "utils/lsyscache.h" -#include "catalog/pg_namespace.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/shardsplit_shared_memory.h" +#include "distributed/worker_protocol.h" +#include "distributed/worker_shard_visibility.h" extern void _PG_output_plugin_init(OutputPluginCallbacks *cb); static LogicalDecodeChangeCB pgOutputPluginChangeCB; diff --git a/src/backend/distributed/shardsplit/shardsplit_logical_replication.c b/src/backend/distributed/shardsplit/shardsplit_logical_replication.c index 8ffccb90c..328dc9af9 100644 --- a/src/backend/distributed/shardsplit/shardsplit_logical_replication.c +++ b/src/backend/distributed/shardsplit/shardsplit_logical_replication.c @@ -10,23 +10,26 @@ */ #include "postgres.h" + #include "miscadmin.h" + +#include "commands/dbcommands.h" #include "nodes/pg_list.h" +#include "utils/builtins.h" + #include "distributed/colocation_utils.h" +#include "distributed/connection_management.h" #include "distributed/hash_helpers.h" +#include "distributed/listutils.h" #include "distributed/metadata_cache.h" #include "distributed/multi_partitioning_utils.h" #include "distributed/priority.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/connection_management.h" #include "distributed/remote_commands.h" -#include "distributed/shard_split.h" -#include "distributed/shared_library_init.h" -#include "distributed/listutils.h" -#include "distributed/shardsplit_logical_replication.h" #include "distributed/resource_lock.h" -#include "utils/builtins.h" -#include "commands/dbcommands.h" +#include "distributed/shard_split.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/shardsplit_logical_replication.h" +#include "distributed/shared_library_init.h" static HTAB *ShardInfoHashMapForPublications = NULL; diff --git a/src/backend/distributed/shardsplit/shardsplit_shared_memory.c b/src/backend/distributed/shardsplit/shardsplit_shared_memory.c index 3e8745758..16ed79ad7 100644 --- a/src/backend/distributed/shardsplit/shardsplit_shared_memory.c +++ b/src/backend/distributed/shardsplit/shardsplit_shared_memory.c @@ -12,13 +12,15 @@ */ #include "postgres.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/shardsplit_shared_memory.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/multi_logical_replication.h" + +#include "common/hashfn.h" #include "storage/ipc.h" #include "utils/memutils.h" -#include "common/hashfn.h" + +#include "distributed/citus_safe_lib.h" +#include "distributed/multi_logical_replication.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/shardsplit_shared_memory.h" const char *SharedMemoryNameForHandleManagement = "Shared memory handle for shard split"; diff --git a/src/backend/distributed/shared_library_init.c b/src/backend/distributed/shared_library_init.c index dccc30e15..ffb235596 100644 --- a/src/backend/distributed/shared_library_init.c +++ b/src/backend/distributed/shared_library_init.c @@ -7,12 +7,12 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" - #include #include #include +#include "postgres.h" + /* necessary to get alloca on illumos */ #ifdef __sun #include @@ -20,93 +20,24 @@ #include "fmgr.h" #include "miscadmin.h" - #include "safe_lib.h" -#include "catalog/pg_authid.h" #include "catalog/objectaccess.h" +#include "catalog/pg_authid.h" #include "catalog/pg_extension.h" -#include "citus_version.h" #include "commands/explain.h" #include "commands/extension.h" #include "commands/seclabel.h" #include "common/string.h" #include "executor/executor.h" -#include "distributed/backend_data.h" -#include "distributed/background_jobs.h" -#include "distributed/causal_clock.h" -#include "distributed/citus_depended_object.h" -#include "distributed/citus_nodefuncs.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/commands.h" -#include "distributed/commands/multi_copy.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/connection_management.h" -#include "distributed/cte_inline.h" -#include "distributed/distributed_deadlock_detection.h" -#include "distributed/errormessage.h" -#include "distributed/repartition_executor.h" -#include "distributed/intermediate_result_pruning.h" -#include "distributed/local_multi_copy.h" -#include "distributed/local_executor.h" -#include "distributed/local_distributed_join_planner.h" -#include "distributed/locally_reserved_shared_connections.h" -#include "distributed/log_utils.h" -#include "distributed/maintenanced.h" -#include "distributed/shard_cleaner.h" -#include "distributed/metadata_utility.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata_sync.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_explain.h" -#include "distributed/multi_join_order.h" -#include "distributed/multi_logical_replication.h" -#include "distributed/multi_logical_optimizer.h" -#include "distributed/distributed_planner.h" -#include "distributed/combine_query_planner.h" -#include "distributed/multi_router_planner.h" -#include "distributed/multi_server_executor.h" -#include "distributed/pg_dist_partition.h" -#include "distributed/placement_connection.h" -#include "distributed/priority.h" -#include "distributed/query_stats.h" -#include "distributed/recursive_planning.h" -#include "distributed/reference_table_utils.h" -#include "distributed/relation_access_tracking.h" -#include "distributed/replication_origin_session_utils.h" -#include "distributed/run_from_same_connection.h" -#include "distributed/shard_cleaner.h" -#include "distributed/shard_transfer.h" -#include "distributed/shared_connection_stats.h" -#include "distributed/shardsplit_shared_memory.h" -#include "distributed/query_pushdown_planning.h" -#include "distributed/time_constants.h" -#include "distributed/query_stats.h" -#include "distributed/remote_commands.h" -#include "distributed/shard_rebalancer.h" -#include "distributed/shared_library_init.h" -#include "distributed/statistics_collection.h" -#include "distributed/subplan_execution.h" -#include "distributed/resource_lock.h" -#include "distributed/transaction_management.h" -#include "distributed/transaction_recovery.h" -#include "distributed/utils/citus_stat_tenants.h" -#include "distributed/utils/directory.h" -#include "distributed/worker_log_messages.h" -#include "distributed/worker_manager.h" -#include "distributed/worker_protocol.h" -#include "distributed/worker_shard_visibility.h" -#include "distributed/adaptive_executor.h" #include "libpq/auth.h" +#include "optimizer/paths.h" +#include "optimizer/plancat.h" +#include "optimizer/planner.h" #include "port/atomics.h" #include "postmaster/postmaster.h" #include "replication/walsender.h" #include "storage/ipc.h" -#include "optimizer/planner.h" -#include "optimizer/plancat.h" -#include "optimizer/paths.h" #include "tcop/tcopprot.h" #include "utils/guc.h" #include "utils/guc_tables.h" @@ -115,8 +46,76 @@ #include "utils/syscache.h" #include "utils/varlena.h" +#include "citus_version.h" + #include "columnar/columnar.h" +#include "distributed/adaptive_executor.h" +#include "distributed/backend_data.h" +#include "distributed/background_jobs.h" +#include "distributed/causal_clock.h" +#include "distributed/citus_depended_object.h" +#include "distributed/citus_nodefuncs.h" +#include "distributed/citus_safe_lib.h" +#include "distributed/combine_query_planner.h" +#include "distributed/commands.h" +#include "distributed/commands/multi_copy.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/connection_management.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/cte_inline.h" +#include "distributed/distributed_deadlock_detection.h" +#include "distributed/distributed_planner.h" +#include "distributed/errormessage.h" +#include "distributed/intermediate_result_pruning.h" +#include "distributed/local_distributed_join_planner.h" +#include "distributed/local_executor.h" +#include "distributed/local_multi_copy.h" +#include "distributed/locally_reserved_shared_connections.h" +#include "distributed/log_utils.h" +#include "distributed/maintenanced.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_explain.h" +#include "distributed/multi_join_order.h" +#include "distributed/multi_logical_optimizer.h" +#include "distributed/multi_logical_replication.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/multi_router_planner.h" +#include "distributed/multi_server_executor.h" +#include "distributed/pg_dist_partition.h" +#include "distributed/placement_connection.h" +#include "distributed/priority.h" +#include "distributed/query_pushdown_planning.h" +#include "distributed/query_stats.h" +#include "distributed/recursive_planning.h" +#include "distributed/reference_table_utils.h" +#include "distributed/relation_access_tracking.h" +#include "distributed/remote_commands.h" +#include "distributed/repartition_executor.h" +#include "distributed/replication_origin_session_utils.h" +#include "distributed/resource_lock.h" +#include "distributed/run_from_same_connection.h" +#include "distributed/shard_cleaner.h" +#include "distributed/shard_rebalancer.h" +#include "distributed/shard_transfer.h" +#include "distributed/shardsplit_shared_memory.h" +#include "distributed/shared_connection_stats.h" +#include "distributed/shared_library_init.h" +#include "distributed/statistics_collection.h" +#include "distributed/subplan_execution.h" +#include "distributed/time_constants.h" +#include "distributed/transaction_management.h" +#include "distributed/transaction_recovery.h" +#include "distributed/utils/citus_stat_tenants.h" +#include "distributed/utils/directory.h" +#include "distributed/worker_log_messages.h" +#include "distributed/worker_manager.h" +#include "distributed/worker_protocol.h" +#include "distributed/worker_shard_visibility.h" + /* marks shared object as one loadable by the postgres version compiled against */ PG_MODULE_MAGIC; diff --git a/src/backend/distributed/test/backend_counter.c b/src/backend/distributed/test/backend_counter.c index 1b9984ac9..f3f19f0d3 100644 --- a/src/backend/distributed/test/backend_counter.c +++ b/src/backend/distributed/test/backend_counter.c @@ -11,6 +11,7 @@ */ #include "postgres.h" + #include "fmgr.h" #include "distributed/backend_data.h" diff --git a/src/backend/distributed/test/citus_depended_object.c b/src/backend/distributed/test/citus_depended_object.c index 4e1e919e8..77fc2e482 100644 --- a/src/backend/distributed/test/citus_depended_object.c +++ b/src/backend/distributed/test/citus_depended_object.c @@ -13,17 +13,17 @@ #include "catalog/pg_am.h" #include "catalog/pg_amop.h" #include "catalog/pg_amproc.h" -#include "catalog/pg_attribute.h" #include "catalog/pg_attrdef.h" -#include "catalog/pg_constraint.h" +#include "catalog/pg_attribute.h" #include "catalog/pg_class.h" +#include "catalog/pg_constraint.h" #include "catalog/pg_depend.h" #include "catalog/pg_enum.h" #include "catalog/pg_event_trigger.h" #include "catalog/pg_language.h" #include "catalog/pg_namespace.h" -#include "catalog/pg_operator.h" #include "catalog/pg_opclass.h" +#include "catalog/pg_operator.h" #include "catalog/pg_opfamily.h" #include "catalog/pg_proc.h" #include "catalog/pg_rewrite.h" @@ -34,11 +34,12 @@ #include "catalog/pg_ts_dict.h" #include "catalog/pg_ts_template.h" #include "catalog/pg_type.h" + #include "distributed/citus_depended_object.h" #include "distributed/listutils.h" -#include "distributed/metadata_cache.h" #include "distributed/metadata/dependency.h" #include "distributed/metadata/distobject.h" +#include "distributed/metadata_cache.h" static bool IsCitusDependentObject(ObjectAddress objectAddress); diff --git a/src/backend/distributed/test/citus_stat_tenants.c b/src/backend/distributed/test/citus_stat_tenants.c index 2cfe0029b..b8fe305c6 100644 --- a/src/backend/distributed/test/citus_stat_tenants.c +++ b/src/backend/distributed/test/citus_stat_tenants.c @@ -10,11 +10,13 @@ */ #include "postgres.h" + #include "fmgr.h" -#include "distributed/utils/citus_stat_tenants.h" #include "sys/time.h" +#include "distributed/utils/citus_stat_tenants.h" + PG_FUNCTION_INFO_V1(sleep_until_next_period); /* diff --git a/src/backend/distributed/test/colocation_utils.c b/src/backend/distributed/test/colocation_utils.c index 19a4e1664..6a87539c4 100644 --- a/src/backend/distributed/test/colocation_utils.c +++ b/src/backend/distributed/test/colocation_utils.c @@ -11,9 +11,11 @@ */ #include "postgres.h" + #include "fmgr.h" #include "catalog/pg_type.h" + #include "distributed/colocation_utils.h" #include "distributed/listutils.h" #include "distributed/metadata_cache.h" diff --git a/src/backend/distributed/test/create_shards.c b/src/backend/distributed/test/create_shards.c index 4ed1db7c7..4ef13f1cb 100644 --- a/src/backend/distributed/test/create_shards.c +++ b/src/backend/distributed/test/create_shards.c @@ -10,16 +10,18 @@ *------------------------------------------------------------------------- */ +#include + #include "postgres.h" + #include "c.h" #include "fmgr.h" -#include - -#include "distributed/listutils.h" #include "lib/stringinfo.h" #include "nodes/pg_list.h" +#include "distributed/listutils.h" + /* local function forward declarations */ static int CompareStrings(const void *leftElement, const void *rightElement); diff --git a/src/backend/distributed/test/deparse_function_query.c b/src/backend/distributed/test/deparse_function_query.c index 7a6e54424..8971f597a 100644 --- a/src/backend/distributed/test/deparse_function_query.c +++ b/src/backend/distributed/test/deparse_function_query.c @@ -13,9 +13,10 @@ #include "postgres.h" +#include "utils/builtins.h" + #include "distributed/deparser.h" #include "distributed/multi_executor.h" -#include "utils/builtins.h" /* declarations for dynamic loading */ PG_FUNCTION_INFO_V1(deparse_test); diff --git a/src/backend/distributed/test/deparse_shard_query.c b/src/backend/distributed/test/deparse_shard_query.c index a6196146f..a9b4ced1d 100644 --- a/src/backend/distributed/test/deparse_shard_query.c +++ b/src/backend/distributed/test/deparse_shard_query.c @@ -10,18 +10,14 @@ *------------------------------------------------------------------------- */ +#include + #include "postgres.h" + #include "c.h" #include "fmgr.h" -#include - #include "catalog/pg_type.h" -#include "distributed/listutils.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/insert_select_planner.h" -#include "distributed/multi_router_planner.h" #include "lib/stringinfo.h" #include "nodes/makefuncs.h" #include "nodes/nodes.h" @@ -33,6 +29,12 @@ #include "utils/builtins.h" #include "utils/palloc.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/insert_select_planner.h" +#include "distributed/listutils.h" +#include "distributed/multi_router_planner.h" + /* declarations for dynamic loading */ PG_FUNCTION_INFO_V1(deparse_shard_query_test); diff --git a/src/backend/distributed/test/dependency.c b/src/backend/distributed/test/dependency.c index 82e818b8c..7afbfdec7 100644 --- a/src/backend/distributed/test/dependency.c +++ b/src/backend/distributed/test/dependency.c @@ -9,6 +9,7 @@ *------------------------------------------------------------------------- */ #include "postgres.h" + #include "c.h" #include "fmgr.h" diff --git a/src/backend/distributed/test/distributed_deadlock_detection.c b/src/backend/distributed/test/distributed_deadlock_detection.c index d3fa34db2..68b5622a7 100644 --- a/src/backend/distributed/test/distributed_deadlock_detection.c +++ b/src/backend/distributed/test/distributed_deadlock_detection.c @@ -10,10 +10,15 @@ *------------------------------------------------------------------------- */ #include "postgres.h" + #include "funcapi.h" #include "miscadmin.h" #include "access/hash.h" +#include "nodes/pg_list.h" +#include "utils/hsearch.h" +#include "utils/timestamp.h" + #include "distributed/backend_data.h" #include "distributed/distributed_deadlock_detection.h" #include "distributed/hash_helpers.h" @@ -22,9 +27,6 @@ #include "distributed/metadata_cache.h" #include "distributed/transaction_identifier.h" #include "distributed/tuplestore.h" -#include "nodes/pg_list.h" -#include "utils/hsearch.h" -#include "utils/timestamp.h" PG_FUNCTION_INFO_V1(get_adjacency_list_wait_graph); diff --git a/src/backend/distributed/test/distributed_intermediate_results.c b/src/backend/distributed/test/distributed_intermediate_results.c index c3b286f52..843bda476 100644 --- a/src/backend/distributed/test/distributed_intermediate_results.c +++ b/src/backend/distributed/test/distributed_intermediate_results.c @@ -13,12 +13,15 @@ #include #include "postgres.h" + #include "funcapi.h" #include "libpq-fe.h" #include "miscadmin.h" #include "pgstat.h" #include "catalog/pg_type.h" +#include "tcop/tcopprot.h" + #include "distributed/commands/multi_copy.h" #include "distributed/connection_management.h" #include "distributed/intermediate_results.h" @@ -26,10 +29,8 @@ #include "distributed/multi_executor.h" #include "distributed/remote_commands.h" #include "distributed/tuplestore.h" -#include "distributed/listutils.h" #include "distributed/utils/array_type.h" #include "distributed/version_compat.h" -#include "tcop/tcopprot.h" PG_FUNCTION_INFO_V1(partition_task_list_results); PG_FUNCTION_INFO_V1(redistribute_task_list_results); diff --git a/src/backend/distributed/test/distribution_metadata.c b/src/backend/distributed/test/distribution_metadata.c index c3bc7fb51..01117922e 100644 --- a/src/backend/distributed/test/distribution_metadata.c +++ b/src/backend/distributed/test/distribution_metadata.c @@ -10,37 +10,39 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" -#include "c.h" -#include "fmgr.h" - #include #include +#include "postgres.h" + +#include "c.h" +#include "fmgr.h" + #include "access/heapam.h" #include "catalog/pg_type.h" -#include "distributed/distribution_column.h" -#include "distributed/listutils.h" -#include "distributed/metadata_utility.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_join_order.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/pg_dist_shard.h" -#include "distributed/query_utils.h" -#include "distributed/resource_lock.h" -#include "distributed/utils/array_type.h" #include "lib/stringinfo.h" #include "nodes/pg_list.h" #include "nodes/primnodes.h" #include "storage/lock.h" #include "tcop/tcopprot.h" #include "utils/array.h" +#include "utils/builtins.h" #include "utils/elog.h" #include "utils/errcodes.h" -#include "utils/builtins.h" #include "utils/palloc.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/distribution_column.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_join_order.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/pg_dist_shard.h" +#include "distributed/query_utils.h" +#include "distributed/resource_lock.h" +#include "distributed/utils/array_type.h" + /* declarations for dynamic loading */ PG_FUNCTION_INFO_V1(load_shard_id_array); diff --git a/src/backend/distributed/test/fake_am.c b/src/backend/distributed/test/fake_am.c index 4b11d7871..cff124961 100644 --- a/src/backend/distributed/test/fake_am.c +++ b/src/backend/distributed/test/fake_am.c @@ -19,14 +19,10 @@ #include "postgres.h" -#include "pg_version_constants.h" -#include "pg_version_compat.h" - - #include "access/amapi.h" #include "access/heapam.h" -#include "access/tableam.h" #include "access/multixact.h" +#include "access/tableam.h" #include "access/xact.h" #include "catalog/index.h" #include "catalog/storage.h" @@ -36,6 +32,9 @@ #include "storage/smgr.h" #include "utils/snapmgr.h" +#include "pg_version_compat.h" +#include "pg_version_constants.h" + PG_FUNCTION_INFO_V1(fake_am_handler); static const TableAmRoutine fake_methods; diff --git a/src/backend/distributed/test/fake_fdw.c b/src/backend/distributed/test/fake_fdw.c index f53242f7f..585e61d41 100644 --- a/src/backend/distributed/test/fake_fdw.c +++ b/src/backend/distributed/test/fake_fdw.c @@ -10,27 +10,27 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" +#include -#include "pg_version_constants.h" +#include "postgres.h" #include "c.h" #include "fmgr.h" -#include - #include "executor/tuptable.h" #include "foreign/fdwapi.h" #include "nodes/execnodes.h" #include "nodes/nodes.h" +#include "nodes/pathnodes.h" #include "nodes/pg_list.h" #include "nodes/plannodes.h" -#include "nodes/pathnodes.h" #include "optimizer/pathnode.h" #include "optimizer/planmain.h" #include "optimizer/restrictinfo.h" #include "utils/palloc.h" +#include "pg_version_constants.h" + /* local function forward declarations */ static void FakeGetForeignRelSize(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid); diff --git a/src/backend/distributed/test/foreign_key_relationship_query.c b/src/backend/distributed/test/foreign_key_relationship_query.c index 545c2e970..af187111a 100644 --- a/src/backend/distributed/test/foreign_key_relationship_query.c +++ b/src/backend/distributed/test/foreign_key_relationship_query.c @@ -11,18 +11,20 @@ */ #include "postgres.h" + #include "fmgr.h" #include "funcapi.h" #include "catalog/dependency.h" #include "catalog/pg_constraint.h" -#include "distributed/foreign_key_relationship.h" +#include "utils/builtins.h" + #include "distributed/coordinator_protocol.h" +#include "distributed/foreign_key_relationship.h" #include "distributed/listutils.h" #include "distributed/metadata_cache.h" #include "distributed/tuplestore.h" #include "distributed/version_compat.h" -#include "utils/builtins.h" #define GET_FKEY_CONNECTED_RELATIONS_COLUMNS 1 diff --git a/src/backend/distributed/test/global_pid.c b/src/backend/distributed/test/global_pid.c index de54f1929..b63b39b44 100644 --- a/src/backend/distributed/test/global_pid.c +++ b/src/backend/distributed/test/global_pid.c @@ -10,6 +10,7 @@ */ #include "postgres.h" + #include "fmgr.h" #include "distributed/backend_data.h" diff --git a/src/backend/distributed/test/hide_shards.c b/src/backend/distributed/test/hide_shards.c index 59e738c36..b1adf61b4 100644 --- a/src/backend/distributed/test/hide_shards.c +++ b/src/backend/distributed/test/hide_shards.c @@ -10,6 +10,7 @@ *------------------------------------------------------------------------- */ #include "postgres.h" + #include "funcapi.h" #include "miscadmin.h" #include "pgstat.h" diff --git a/src/backend/distributed/test/intermediate_results.c b/src/backend/distributed/test/intermediate_results.c index b4f14bca6..8681a6ca9 100644 --- a/src/backend/distributed/test/intermediate_results.c +++ b/src/backend/distributed/test/intermediate_results.c @@ -13,6 +13,7 @@ #include #include "postgres.h" + #include "funcapi.h" #include "libpq-fe.h" #include "miscadmin.h" diff --git a/src/backend/distributed/test/make_external_connection.c b/src/backend/distributed/test/make_external_connection.c index 424793dea..14be057ab 100644 --- a/src/backend/distributed/test/make_external_connection.c +++ b/src/backend/distributed/test/make_external_connection.c @@ -11,10 +11,17 @@ */ #include "postgres.h" -#include "miscadmin.h" + #include "libpq-fe.h" +#include "miscadmin.h" #include "access/xact.h" +#include "executor/spi.h" +#include "lib/stringinfo.h" +#include "postmaster/postmaster.h" +#include "utils/builtins.h" +#include "utils/memutils.h" + #include "distributed/connection_management.h" #include "distributed/coordinator_protocol.h" #include "distributed/function_utils.h" @@ -23,13 +30,7 @@ #include "distributed/metadata_cache.h" #include "distributed/remote_commands.h" #include "distributed/run_from_same_connection.h" - #include "distributed/version_compat.h" -#include "executor/spi.h" -#include "lib/stringinfo.h" -#include "postmaster/postmaster.h" -#include "utils/builtins.h" -#include "utils/memutils.h" PG_FUNCTION_INFO_V1(make_external_connection_to_node); diff --git a/src/backend/distributed/test/metadata_sync.c b/src/backend/distributed/test/metadata_sync.c index 8ad4b15f2..d6aeb842c 100644 --- a/src/backend/distributed/test/metadata_sync.c +++ b/src/backend/distributed/test/metadata_sync.c @@ -10,10 +10,17 @@ *------------------------------------------------------------------------- */ #include "postgres.h" + #include "c.h" #include "fmgr.h" +#include "miscadmin.h" #include "catalog/pg_type.h" +#include "postmaster/postmaster.h" +#include "storage/latch.h" +#include "utils/array.h" +#include "utils/builtins.h" + #include "distributed/connection_management.h" #include "distributed/intermediate_result_pruning.h" #include "distributed/listutils.h" @@ -22,11 +29,6 @@ #include "distributed/remote_commands.h" #include "distributed/utils/array_type.h" #include "distributed/worker_manager.h" -#include "postmaster/postmaster.h" -#include "miscadmin.h" -#include "storage/latch.h" -#include "utils/array.h" -#include "utils/builtins.h" /* declarations for dynamic loading */ diff --git a/src/backend/distributed/test/partitioning_utils.c b/src/backend/distributed/test/partitioning_utils.c index 95adaddf6..be9163561 100644 --- a/src/backend/distributed/test/partitioning_utils.c +++ b/src/backend/distributed/test/partitioning_utils.c @@ -10,16 +10,18 @@ *------------------------------------------------------------------------- */ #include "postgres.h" + #include "fmgr.h" #include "catalog/pg_type.h" -#include "distributed/listutils.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/reference_table_utils.h" #include "lib/stringinfo.h" #include "utils/builtins.h" #include "utils/lsyscache.h" +#include "distributed/listutils.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/reference_table_utils.h" + PG_FUNCTION_INFO_V1(generate_alter_table_detach_partition_command); PG_FUNCTION_INFO_V1(generate_alter_table_attach_partition_command); diff --git a/src/backend/distributed/test/progress_utils.c b/src/backend/distributed/test/progress_utils.c index 42b065dae..e1ea09e3d 100644 --- a/src/backend/distributed/test/progress_utils.c +++ b/src/backend/distributed/test/progress_utils.c @@ -11,18 +11,20 @@ */ +#include + #include "postgres.h" -#include "miscadmin.h" + #include "fmgr.h" #include "funcapi.h" +#include "miscadmin.h" -#include +#include "nodes/execnodes.h" +#include "utils/tuplestore.h" #include "distributed/listutils.h" #include "distributed/multi_progress.h" #include "distributed/tuplestore.h" -#include "nodes/execnodes.h" -#include "utils/tuplestore.h" PG_FUNCTION_INFO_V1(create_progress); diff --git a/src/backend/distributed/test/prune_shard_list.c b/src/backend/distributed/test/prune_shard_list.c index 023a759cb..f972281ec 100644 --- a/src/backend/distributed/test/prune_shard_list.c +++ b/src/backend/distributed/test/prune_shard_list.c @@ -10,25 +10,15 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" +#include -#include "pg_version_constants.h" +#include "postgres.h" #include "c.h" #include "fmgr.h" -#include - #include "access/stratnum.h" #include "catalog/pg_type.h" -#include "distributed/listutils.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata_utility.h" -#include "distributed/multi_join_order.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/resource_lock.h" -#include "distributed/shard_pruning.h" -#include "distributed/utils/array_type.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "nodes/nodes.h" @@ -38,6 +28,17 @@ #include "utils/array.h" #include "utils/palloc.h" +#include "pg_version_constants.h" + +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_join_order.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/resource_lock.h" +#include "distributed/shard_pruning.h" +#include "distributed/utils/array_type.h" + /* local function forward declarations */ static Expr * MakeTextPartitionExpression(Oid distributedTableId, text *value); diff --git a/src/backend/distributed/test/relation_access_tracking.c b/src/backend/distributed/test/relation_access_tracking.c index 5715bd03d..85c0ff2aa 100644 --- a/src/backend/distributed/test/relation_access_tracking.c +++ b/src/backend/distributed/test/relation_access_tracking.c @@ -10,6 +10,7 @@ */ #include "postgres.h" + #include "c.h" #include "fmgr.h" diff --git a/src/backend/distributed/test/run_from_same_connection.c b/src/backend/distributed/test/run_from_same_connection.c index 04a3149da..5663a42fa 100644 --- a/src/backend/distributed/test/run_from_same_connection.c +++ b/src/backend/distributed/test/run_from_same_connection.c @@ -12,10 +12,17 @@ */ #include "postgres.h" -#include "miscadmin.h" + #include "libpq-fe.h" +#include "miscadmin.h" #include "access/xact.h" +#include "executor/spi.h" +#include "lib/stringinfo.h" +#include "postmaster/postmaster.h" +#include "utils/builtins.h" +#include "utils/memutils.h" + #include "distributed/connection_management.h" #include "distributed/coordinator_protocol.h" #include "distributed/function_utils.h" @@ -24,13 +31,7 @@ #include "distributed/metadata_cache.h" #include "distributed/remote_commands.h" #include "distributed/run_from_same_connection.h" - #include "distributed/version_compat.h" -#include "executor/spi.h" -#include "lib/stringinfo.h" -#include "postmaster/postmaster.h" -#include "utils/builtins.h" -#include "utils/memutils.h" #define ALTER_CURRENT_PROCESS_ID \ diff --git a/src/backend/distributed/test/sequential_execution.c b/src/backend/distributed/test/sequential_execution.c index 9b88e3b7a..f967eb75f 100644 --- a/src/backend/distributed/test/sequential_execution.c +++ b/src/backend/distributed/test/sequential_execution.c @@ -11,6 +11,7 @@ */ #include "postgres.h" + #include "fmgr.h" #include "distributed/multi_executor.h" diff --git a/src/backend/distributed/test/shard_rebalancer.c b/src/backend/distributed/test/shard_rebalancer.c index 56a063982..32bfd9f46 100644 --- a/src/backend/distributed/test/shard_rebalancer.c +++ b/src/backend/distributed/test/shard_rebalancer.c @@ -11,27 +11,28 @@ */ #include "postgres.h" -#include "libpq-fe.h" +#include "funcapi.h" +#include "libpq-fe.h" +#include "miscadmin.h" #include "safe_lib.h" #include "catalog/pg_type.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/connection_management.h" -#include "distributed/listutils.h" -#include "distributed/metadata_utility.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/shard_cleaner.h" -#include "distributed/shard_rebalancer.h" -#include "distributed/relay_utility.h" -#include "funcapi.h" -#include "miscadmin.h" #include "utils/builtins.h" #include "utils/json.h" #include "utils/lsyscache.h" #include "utils/memutils.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/citus_safe_lib.h" +#include "distributed/connection_management.h" +#include "distributed/listutils.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_physical_planner.h" +#include "distributed/relay_utility.h" +#include "distributed/shard_cleaner.h" +#include "distributed/shard_rebalancer.h" + /* static declarations for json conversion */ static List * JsonArrayToShardPlacementTestInfoList( ArrayType *shardPlacementJsonArrayObject); diff --git a/src/backend/distributed/test/shared_connection_counters.c b/src/backend/distributed/test/shared_connection_counters.c index 641cfd314..c59602887 100644 --- a/src/backend/distributed/test/shared_connection_counters.c +++ b/src/backend/distributed/test/shared_connection_counters.c @@ -11,14 +11,16 @@ */ #include "postgres.h" -#include "miscadmin.h" -#include "fmgr.h" -#include "distributed/shared_connection_stats.h" -#include "distributed/listutils.h" +#include "fmgr.h" +#include "miscadmin.h" + #include "nodes/parsenodes.h" #include "utils/guc.h" +#include "distributed/listutils.h" +#include "distributed/shared_connection_stats.h" + /* exports for SQL callable functions */ PG_FUNCTION_INFO_V1(wake_up_connection_pool_waiters); PG_FUNCTION_INFO_V1(set_max_shared_pool_size); diff --git a/src/backend/distributed/test/xact_stats.c b/src/backend/distributed/test/xact_stats.c index 87e15aa64..a968f8cb6 100644 --- a/src/backend/distributed/test/xact_stats.c +++ b/src/backend/distributed/test/xact_stats.c @@ -13,6 +13,7 @@ #include #include "postgres.h" + #include "funcapi.h" #include "libpq-fe.h" #include "miscadmin.h" diff --git a/src/backend/distributed/transaction/backend_data.c b/src/backend/distributed/transaction/backend_data.c index c1981b77a..5f868f548 100644 --- a/src/backend/distributed/transaction/backend_data.c +++ b/src/backend/distributed/transaction/backend_data.c @@ -12,18 +12,29 @@ #include "postgres.h" -#include "pg_version_constants.h" - +#include "funcapi.h" #include "miscadmin.h" +#include "safe_lib.h" #include "unistd.h" -#include "safe_lib.h" - -#include "funcapi.h" #include "access/htup_details.h" #include "catalog/pg_authid.h" #include "catalog/pg_type.h" #include "datatype/timestamp.h" +#include "nodes/execnodes.h" +#include "postmaster/autovacuum.h" /* to access autovacuum_max_workers */ +#include "replication/walsender.h" +#include "storage/ipc.h" +#include "storage/lmgr.h" +#include "storage/lwlock.h" +#include "storage/proc.h" +#include "storage/procarray.h" +#include "storage/s_lock.h" +#include "storage/spin.h" +#include "utils/timestamp.h" + +#include "pg_version_constants.h" + #include "distributed/backend_data.h" #include "distributed/connection_management.h" #include "distributed/listutils.h" @@ -34,17 +45,6 @@ #include "distributed/transaction_identifier.h" #include "distributed/tuplestore.h" #include "distributed/worker_manager.h" -#include "nodes/execnodes.h" -#include "postmaster/autovacuum.h" /* to access autovacuum_max_workers */ -#include "replication/walsender.h" -#include "storage/ipc.h" -#include "storage/lmgr.h" -#include "storage/lwlock.h" -#include "storage/procarray.h" -#include "storage/proc.h" -#include "storage/spin.h" -#include "storage/s_lock.h" -#include "utils/timestamp.h" #define GET_ACTIVE_TRANSACTION_QUERY "SELECT * FROM get_all_active_transactions();" diff --git a/src/backend/distributed/transaction/citus_dist_stat_activity.c b/src/backend/distributed/transaction/citus_dist_stat_activity.c index 3aa6372e6..b0ffc05eb 100644 --- a/src/backend/distributed/transaction/citus_dist_stat_activity.c +++ b/src/backend/distributed/transaction/citus_dist_stat_activity.c @@ -10,8 +10,9 @@ */ #include "postgres.h" -#include "miscadmin.h" + #include "funcapi.h" +#include "miscadmin.h" PG_FUNCTION_INFO_V1(citus_dist_stat_activity); PG_FUNCTION_INFO_V1(citus_worker_stat_activity); diff --git a/src/backend/distributed/transaction/distributed_deadlock_detection.c b/src/backend/distributed/transaction/distributed_deadlock_detection.c index cf8dd43f5..27bb48ee3 100644 --- a/src/backend/distributed/transaction/distributed_deadlock_detection.c +++ b/src/backend/distributed/transaction/distributed_deadlock_detection.c @@ -15,8 +15,11 @@ #include "pgstat.h" #include "access/hash.h" +#include "nodes/pg_list.h" +#include "utils/hsearch.h" +#include "utils/timestamp.h" + #include "distributed/backend_data.h" -#include "distributed/errormessage.h" #include "distributed/distributed_deadlock_detection.h" #include "distributed/errormessage.h" #include "distributed/hash_helpers.h" @@ -25,9 +28,6 @@ #include "distributed/log_utils.h" #include "distributed/metadata_cache.h" #include "distributed/transaction_identifier.h" -#include "nodes/pg_list.h" -#include "utils/hsearch.h" -#include "utils/timestamp.h" /* used only for finding the deadlock cycle path */ diff --git a/src/backend/distributed/transaction/lock_graph.c b/src/backend/distributed/transaction/lock_graph.c index 0b4c0f02e..82f936243 100644 --- a/src/backend/distributed/transaction/lock_graph.c +++ b/src/backend/distributed/transaction/lock_graph.c @@ -18,6 +18,11 @@ #include "miscadmin.h" #include "access/hash.h" +#include "storage/proc.h" +#include "utils/builtins.h" +#include "utils/hsearch.h" +#include "utils/timestamp.h" + #include "distributed/backend_data.h" #include "distributed/connection_management.h" #include "distributed/hash_helpers.h" @@ -26,10 +31,6 @@ #include "distributed/metadata_cache.h" #include "distributed/remote_commands.h" #include "distributed/tuplestore.h" -#include "storage/proc.h" -#include "utils/builtins.h" -#include "utils/hsearch.h" -#include "utils/timestamp.h" /* diff --git a/src/backend/distributed/transaction/relation_access_tracking.c b/src/backend/distributed/transaction/relation_access_tracking.c index 3ad61ac79..5044941c4 100644 --- a/src/backend/distributed/transaction/relation_access_tracking.c +++ b/src/backend/distributed/transaction/relation_access_tracking.c @@ -15,22 +15,23 @@ */ #include "postgres.h" -#include "pg_version_constants.h" - #include "miscadmin.h" #include "access/xact.h" +#include "common/hashfn.h" +#include "utils/hsearch.h" +#include "utils/lsyscache.h" + +#include "pg_version_constants.h" + #include "distributed/colocation_utils.h" #include "distributed/hash_helpers.h" #include "distributed/listutils.h" +#include "distributed/metadata_cache.h" #include "distributed/multi_executor.h" #include "distributed/multi_join_order.h" #include "distributed/multi_partitioning_utils.h" -#include "distributed/metadata_cache.h" #include "distributed/relation_access_tracking.h" -#include "utils/hsearch.h" -#include "common/hashfn.h" -#include "utils/lsyscache.h" /* Config variables managed via guc.c */ diff --git a/src/backend/distributed/transaction/remote_transaction.c b/src/backend/distributed/transaction/remote_transaction.c index 0f6241793..3dc89c995 100644 --- a/src/backend/distributed/transaction/remote_transaction.c +++ b/src/backend/distributed/transaction/remote_transaction.c @@ -16,10 +16,12 @@ #include "postgres.h" #include "libpq-fe.h" - #include "miscadmin.h" #include "access/xact.h" +#include "utils/builtins.h" +#include "utils/hsearch.h" + #include "distributed/backend_data.h" #include "distributed/citus_safe_lib.h" #include "distributed/connection_management.h" @@ -32,8 +34,6 @@ #include "distributed/transaction_management.h" #include "distributed/transaction_recovery.h" #include "distributed/worker_manager.h" -#include "utils/builtins.h" -#include "utils/hsearch.h" #define PREPARED_TRANSACTION_NAME_FORMAT "citus_%u_%u_"UINT64_FORMAT "_%u" diff --git a/src/backend/distributed/transaction/transaction_management.c b/src/backend/distributed/transaction/transaction_management.c index 9a7bd9089..d133d7be6 100644 --- a/src/backend/distributed/transaction/transaction_management.c +++ b/src/backend/distributed/transaction/transaction_management.c @@ -14,15 +14,22 @@ #include "postgres.h" #include "libpq-fe.h" - #include "miscadmin.h" #include "access/twophase.h" #include "access/xact.h" #include "catalog/dependency.h" #include "common/hashfn.h" +#include "nodes/print.h" +#include "storage/fd.h" +#include "utils/datum.h" +#include "utils/guc.h" +#include "utils/hsearch.h" +#include "utils/memutils.h" + #include "distributed/backend_data.h" #include "distributed/citus_safe_lib.h" +#include "distributed/commands.h" #include "distributed/connection_management.h" #include "distributed/distributed_planner.h" #include "distributed/function_call_delegation.h" @@ -33,27 +40,20 @@ #include "distributed/locally_reserved_shared_connections.h" #include "distributed/maintenanced.h" #include "distributed/metadata/dependency.h" +#include "distributed/metadata_cache.h" #include "distributed/multi_executor.h" -#include "distributed/multi_logical_replication.h" #include "distributed/multi_explain.h" -#include "distributed/repartition_join_execution.h" -#include "distributed/replication_origin_session_utils.h" -#include "distributed/transaction_management.h" +#include "distributed/multi_logical_replication.h" #include "distributed/placement_connection.h" #include "distributed/relation_access_tracking.h" -#include "distributed/shared_connection_stats.h" +#include "distributed/repartition_join_execution.h" +#include "distributed/replication_origin_session_utils.h" #include "distributed/shard_cleaner.h" +#include "distributed/shared_connection_stats.h" #include "distributed/subplan_execution.h" +#include "distributed/transaction_management.h" #include "distributed/version_compat.h" #include "distributed/worker_log_messages.h" -#include "distributed/commands.h" -#include "distributed/metadata_cache.h" -#include "utils/hsearch.h" -#include "utils/guc.h" -#include "utils/memutils.h" -#include "utils/datum.h" -#include "storage/fd.h" -#include "nodes/print.h" CoordinatedTransactionState CurrentCoordinatedTransactionState = COORD_TRANS_NONE; diff --git a/src/backend/distributed/transaction/transaction_recovery.c b/src/backend/distributed/transaction/transaction_recovery.c index a833f5a46..0ec5ba0a3 100644 --- a/src/backend/distributed/transaction/transaction_recovery.c +++ b/src/backend/distributed/transaction/transaction_recovery.c @@ -12,22 +12,30 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" - -#include "pg_version_constants.h" - -#include "miscadmin.h" -#include "libpq-fe.h" - #include #include +#include "postgres.h" + +#include "libpq-fe.h" +#include "miscadmin.h" + #include "access/genam.h" #include "access/heapam.h" #include "access/htup_details.h" #include "access/relscan.h" #include "access/xact.h" #include "catalog/indexing.h" +#include "lib/stringinfo.h" +#include "storage/lmgr.h" +#include "storage/lock.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/memutils.h" +#include "utils/rel.h" + +#include "pg_version_constants.h" + #include "distributed/backend_data.h" #include "distributed/connection_management.h" #include "distributed/listutils.h" @@ -36,15 +44,8 @@ #include "distributed/remote_commands.h" #include "distributed/resource_lock.h" #include "distributed/transaction_recovery.h" -#include "distributed/worker_manager.h" #include "distributed/version_compat.h" -#include "lib/stringinfo.h" -#include "storage/lmgr.h" -#include "storage/lock.h" -#include "utils/builtins.h" -#include "utils/fmgroids.h" -#include "utils/memutils.h" -#include "utils/rel.h" +#include "distributed/worker_manager.h" /* exports for SQL callable functions */ diff --git a/src/backend/distributed/transaction/worker_transaction.c b/src/backend/distributed/transaction/worker_transaction.c index 3399365aa..2af1e9a6c 100644 --- a/src/backend/distributed/transaction/worker_transaction.c +++ b/src/backend/distributed/transaction/worker_transaction.c @@ -11,28 +11,30 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" -#include "miscadmin.h" -#include "libpq-fe.h" - #include #include +#include "postgres.h" + +#include "libpq-fe.h" +#include "miscadmin.h" + #include "access/xact.h" +#include "utils/builtins.h" +#include "utils/memutils.h" + #include "distributed/connection_management.h" +#include "distributed/jsonbutils.h" #include "distributed/listutils.h" #include "distributed/metadata_cache.h" -#include "distributed/resource_lock.h" #include "distributed/metadata_sync.h" -#include "distributed/remote_commands.h" #include "distributed/pg_dist_node.h" #include "distributed/pg_dist_transaction.h" +#include "distributed/remote_commands.h" +#include "distributed/resource_lock.h" #include "distributed/transaction_recovery.h" #include "distributed/worker_manager.h" #include "distributed/worker_transaction.h" -#include "distributed/jsonbutils.h" -#include "utils/memutils.h" -#include "utils/builtins.h" static void SendCommandToRemoteMetadataNodesParams(const char *command, const char *user, int parameterCount, diff --git a/src/backend/distributed/utils/acquire_lock.c b/src/backend/distributed/utils/acquire_lock.c index f414167b3..d0f6193c2 100644 --- a/src/backend/distributed/utils/acquire_lock.c +++ b/src/backend/distributed/utils/acquire_lock.c @@ -22,12 +22,12 @@ #include "postgres.h" +#include "miscadmin.h" +#include "pgstat.h" #include "access/xact.h" #include "catalog/pg_type.h" #include "executor/spi.h" -#include "miscadmin.h" -#include "pgstat.h" #include "portability/instr_time.h" #include "storage/ipc.h" #include "storage/latch.h" diff --git a/src/backend/distributed/utils/aggregate_utils.c b/src/backend/distributed/utils/aggregate_utils.c index 773e0aa25..3fd584df9 100644 --- a/src/backend/distributed/utils/aggregate_utils.c +++ b/src/backend/distributed/utils/aggregate_utils.c @@ -16,11 +16,14 @@ #include "postgres.h" +#include "fmgr.h" +#include "miscadmin.h" +#include "pg_config_manual.h" + #include "access/htup_details.h" #include "catalog/pg_aggregate.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" -#include "distributed/version_compat.h" #include "nodes/nodeFuncs.h" #include "utils/acl.h" #include "utils/builtins.h" @@ -28,9 +31,8 @@ #include "utils/lsyscache.h" #include "utils/syscache.h" #include "utils/typcache.h" -#include "fmgr.h" -#include "miscadmin.h" -#include "pg_config_manual.h" + +#include "distributed/version_compat.h" PG_FUNCTION_INFO_V1(worker_partial_agg_sfunc); PG_FUNCTION_INFO_V1(worker_partial_agg_ffunc); diff --git a/src/backend/distributed/utils/array_type.c b/src/backend/distributed/utils/array_type.c index 70c7dde14..1c3663d43 100644 --- a/src/backend/distributed/utils/array_type.c +++ b/src/backend/distributed/utils/array_type.c @@ -10,16 +10,19 @@ */ #include "postgres.h" + #include "miscadmin.h" -#include "pg_version_compat.h" #include "catalog/pg_type.h" #include "nodes/pg_list.h" -#include "distributed/utils/array_type.h" #include "utils/array.h" #include "utils/builtins.h" #include "utils/lsyscache.h" +#include "pg_version_compat.h" + +#include "distributed/utils/array_type.h" + /* * DeconstructArrayObject takes in a single dimensional array, and deserializes diff --git a/src/backend/distributed/utils/background_jobs.c b/src/backend/distributed/utils/background_jobs.c index 2b5ce2dca..a7a124c74 100644 --- a/src/backend/distributed/utils/background_jobs.c +++ b/src/backend/distributed/utils/background_jobs.c @@ -27,17 +27,17 @@ #include "postgres.h" +#include "libpq-fe.h" +#include "pgstat.h" #include "safe_mem_lib.h" #include "access/xact.h" #include "commands/dbcommands.h" #include "common/hashfn.h" -#include "libpq-fe.h" #include "libpq/pqformat.h" #include "libpq/pqmq.h" #include "libpq/pqsignal.h" #include "parser/analyze.h" -#include "pgstat.h" #include "storage/dsm.h" #include "storage/ipc.h" #include "storage/procarray.h" @@ -62,9 +62,9 @@ #include "distributed/maintenanced.h" #include "distributed/metadata_cache.h" #include "distributed/metadata_utility.h" +#include "distributed/resource_lock.h" #include "distributed/shard_cleaner.h" #include "distributed/shard_rebalancer.h" -#include "distributed/resource_lock.h" /* Table-of-contents constants for our dynamic shared memory segment. */ #define CITUS_BACKGROUND_TASK_MAGIC 0x51028081 diff --git a/src/backend/distributed/utils/cancel_utils.c b/src/backend/distributed/utils/cancel_utils.c index 17383c034..f135212e4 100644 --- a/src/backend/distributed/utils/cancel_utils.c +++ b/src/backend/distributed/utils/cancel_utils.c @@ -8,7 +8,9 @@ #include "postgres.h" + #include "miscadmin.h" + #include "distributed/cancel_utils.h" diff --git a/src/backend/distributed/utils/citus_clauses.c b/src/backend/distributed/utils/citus_clauses.c index 82900ea1a..f88b173af 100644 --- a/src/backend/distributed/utils/citus_clauses.c +++ b/src/backend/distributed/utils/citus_clauses.c @@ -8,12 +8,6 @@ #include "postgres.h" -#include "distributed/citus_clauses.h" -#include "distributed/insert_select_planner.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_router_planner.h" -#include "distributed/version_compat.h" - #include "catalog/pg_proc.h" #include "catalog/pg_type.h" #include "executor/executor.h" @@ -28,6 +22,12 @@ #include "utils/lsyscache.h" #include "utils/syscache.h" +#include "distributed/citus_clauses.h" +#include "distributed/insert_select_planner.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_router_planner.h" +#include "distributed/version_compat.h" + /* private function declarations */ static bool IsVariableExpression(Node *node); diff --git a/src/backend/distributed/utils/citus_copyfuncs.c b/src/backend/distributed/utils/citus_copyfuncs.c index fe4429f04..e283a3034 100644 --- a/src/backend/distributed/utils/citus_copyfuncs.c +++ b/src/backend/distributed/utils/citus_copyfuncs.c @@ -11,11 +11,11 @@ */ #include "postgres.h" +#include "utils/datum.h" #include "distributed/citus_nodefuncs.h" -#include "distributed/multi_server_executor.h" #include "distributed/listutils.h" -#include "utils/datum.h" +#include "distributed/multi_server_executor.h" /* diff --git a/src/backend/distributed/utils/citus_depended_object.c b/src/backend/distributed/utils/citus_depended_object.c index 3b5a34b54..a160fcd56 100644 --- a/src/backend/distributed/utils/citus_depended_object.c +++ b/src/backend/distributed/utils/citus_depended_object.c @@ -7,6 +7,7 @@ */ #include "postgres.h" + #include "miscadmin.h" #include "catalog/namespace.h" @@ -14,17 +15,17 @@ #include "catalog/pg_am.h" #include "catalog/pg_amop.h" #include "catalog/pg_amproc.h" -#include "catalog/pg_attribute.h" #include "catalog/pg_attrdef.h" -#include "catalog/pg_constraint.h" +#include "catalog/pg_attribute.h" #include "catalog/pg_class.h" +#include "catalog/pg_constraint.h" #include "catalog/pg_depend.h" #include "catalog/pg_enum.h" #include "catalog/pg_event_trigger.h" #include "catalog/pg_language.h" #include "catalog/pg_namespace.h" -#include "catalog/pg_operator.h" #include "catalog/pg_opclass.h" +#include "catalog/pg_operator.h" #include "catalog/pg_opfamily.h" #include "catalog/pg_proc.h" #include "catalog/pg_rewrite.h" @@ -35,12 +36,6 @@ #include "catalog/pg_ts_dict.h" #include "catalog/pg_ts_template.h" #include "catalog/pg_type.h" -#include "distributed/citus_depended_object.h" -#include "distributed/metadata_cache.h" -#include "distributed/commands.h" -#include "distributed/listutils.h" -#include "distributed/log_utils.h" -#include "distributed/shared_library_init.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "nodes/parsenodes.h" @@ -49,6 +44,13 @@ #include "utils/lsyscache.h" #include "utils/syscache.h" +#include "distributed/citus_depended_object.h" +#include "distributed/commands.h" +#include "distributed/listutils.h" +#include "distributed/log_utils.h" +#include "distributed/metadata_cache.h" +#include "distributed/shared_library_init.h" + /* * GUC hides any objects, which depends on citus extension, from pg meta class queries, * it is intended to be used in vanilla tests to not break postgres test logs diff --git a/src/backend/distributed/utils/citus_nodefuncs.c b/src/backend/distributed/utils/citus_nodefuncs.c index 0998560fe..55b83e6c5 100644 --- a/src/backend/distributed/utils/citus_nodefuncs.c +++ b/src/backend/distributed/utils/citus_nodefuncs.c @@ -10,16 +10,17 @@ #include "postgres.h" +#include "catalog/pg_type.h" + #include "pg_version_constants.h" -#include "catalog/pg_type.h" -#include "distributed/citus_nodes.h" #include "distributed/citus_nodefuncs.h" +#include "distributed/citus_nodes.h" #include "distributed/coordinator_protocol.h" +#include "distributed/distributed_planner.h" #include "distributed/errormessage.h" #include "distributed/log_utils.h" #include "distributed/metadata_cache.h" -#include "distributed/distributed_planner.h" #include "distributed/multi_router_planner.h" #include "distributed/multi_server_executor.h" diff --git a/src/backend/distributed/utils/citus_safe_lib.c b/src/backend/distributed/utils/citus_safe_lib.c index cbd06fc50..2d504a644 100644 --- a/src/backend/distributed/utils/citus_safe_lib.c +++ b/src/backend/distributed/utils/citus_safe_lib.c @@ -12,16 +12,17 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" +#include -#include "pg_version_constants.h" +#include "postgres.h" #include "safe_lib.h" -#include +#include "lib/stringinfo.h" + +#include "pg_version_constants.h" #include "distributed/citus_safe_lib.h" -#include "lib/stringinfo.h" /* diff --git a/src/backend/distributed/utils/citus_stat_tenants.c b/src/backend/distributed/utils/citus_stat_tenants.c index aa813e152..6af5c0d58 100644 --- a/src/backend/distributed/utils/citus_stat_tenants.c +++ b/src/backend/distributed/utils/citus_stat_tenants.c @@ -8,21 +8,13 @@ *------------------------------------------------------------------------- */ +#include + #include "postgres.h" + #include "unistd.h" #include "access/hash.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/colocation_utils.h" -#include "distributed/distributed_planner.h" -#include "distributed/jsonbutils.h" -#include "distributed/log_utils.h" -#include "distributed/listutils.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_executor.h" -#include "distributed/tenant_schema_metadata.h" -#include "distributed/tuplestore.h" -#include "distributed/utils/citus_stat_tenants.h" #include "executor/execdesc.h" #include "storage/ipc.h" #include "storage/lwlock.h" @@ -34,7 +26,17 @@ #include "utils/lsyscache.h" #include "utils/syscache.h" -#include +#include "distributed/citus_safe_lib.h" +#include "distributed/colocation_utils.h" +#include "distributed/distributed_planner.h" +#include "distributed/jsonbutils.h" +#include "distributed/listutils.h" +#include "distributed/log_utils.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_executor.h" +#include "distributed/tenant_schema_metadata.h" +#include "distributed/tuplestore.h" +#include "distributed/utils/citus_stat_tenants.h" #if (PG_VERSION_NUM >= PG_VERSION_15) #include "common/pg_prng.h" diff --git a/src/backend/distributed/utils/citus_version.c b/src/backend/distributed/utils/citus_version.c index 95945a30f..edae4f927 100644 --- a/src/backend/distributed/utils/citus_version.c +++ b/src/backend/distributed/utils/citus_version.c @@ -11,9 +11,10 @@ #include "postgres.h" -#include "citus_version.h" #include "utils/builtins.h" +#include "citus_version.h" + /* exports for SQL callable functions */ PG_FUNCTION_INFO_V1(citus_version); diff --git a/src/backend/distributed/utils/colocation_utils.c b/src/backend/distributed/utils/colocation_utils.c index e7007874b..b8db3c80f 100644 --- a/src/backend/distributed/utils/colocation_utils.c +++ b/src/backend/distributed/utils/colocation_utils.c @@ -10,6 +10,7 @@ */ #include "postgres.h" + #include "miscadmin.h" #include "access/genam.h" @@ -19,28 +20,29 @@ #include "catalog/indexing.h" #include "catalog/pg_type.h" #include "commands/sequence.h" +#include "storage/lmgr.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/lsyscache.h" +#include "utils/rel.h" + #include "distributed/colocation_utils.h" #include "distributed/commands.h" -#include "distributed/listutils.h" -#include "distributed/metadata_utility.h" #include "distributed/coordinator_protocol.h" +#include "distributed/listutils.h" #include "distributed/metadata_cache.h" #include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" #include "distributed/multi_logical_planner.h" #include "distributed/multi_partitioning_utils.h" #include "distributed/pg_dist_colocation.h" #include "distributed/resource_lock.h" #include "distributed/shardinterval_utils.h" #include "distributed/tenant_schema_metadata.h" -#include "distributed/version_compat.h" #include "distributed/utils/array_type.h" +#include "distributed/version_compat.h" #include "distributed/worker_protocol.h" #include "distributed/worker_transaction.h" -#include "storage/lmgr.h" -#include "utils/builtins.h" -#include "utils/fmgroids.h" -#include "utils/lsyscache.h" -#include "utils/rel.h" /* local function forward declarations */ diff --git a/src/backend/distributed/utils/directory.c b/src/backend/distributed/utils/directory.c index b749b9cd6..bad585809 100644 --- a/src/backend/distributed/utils/directory.c +++ b/src/backend/distributed/utils/directory.c @@ -12,6 +12,7 @@ #include #include "postgres.h" + #include "funcapi.h" #include "miscadmin.h" diff --git a/src/backend/distributed/utils/distribution_column.c b/src/backend/distributed/utils/distribution_column.c index 474133f73..5927be612 100644 --- a/src/backend/distributed/utils/distribution_column.c +++ b/src/backend/distributed/utils/distribution_column.c @@ -12,19 +12,14 @@ #include "postgres.h" - #include "access/attnum.h" #include "access/heapam.h" #include "access/htup_details.h" -#include "distributed/distribution_column.h" -#include "distributed/metadata_cache.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/version_compat.h" #include "nodes/makefuncs.h" #include "nodes/nodes.h" #include "nodes/primnodes.h" -#include "parser/scansup.h" #include "parser/parse_relation.h" +#include "parser/scansup.h" #include "utils/builtins.h" #include "utils/elog.h" #include "utils/errcodes.h" @@ -33,6 +28,11 @@ #include "utils/relcache.h" #include "utils/syscache.h" +#include "distributed/distribution_column.h" +#include "distributed/metadata_cache.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/version_compat.h" + /* exports for SQL callable functions */ PG_FUNCTION_INFO_V1(column_name_to_column); diff --git a/src/backend/distributed/utils/distribution_column_map.c b/src/backend/distributed/utils/distribution_column_map.c index c3c0db01f..43f9939b1 100644 --- a/src/backend/distributed/utils/distribution_column_map.c +++ b/src/backend/distributed/utils/distribution_column_map.c @@ -11,12 +11,13 @@ #include "postgres.h" #include "common/hashfn.h" +#include "nodes/primnodes.h" + #include "distributed/distribution_column.h" #include "distributed/listutils.h" #include "distributed/multi_join_order.h" #include "distributed/multi_partitioning_utils.h" #include "distributed/utils/distribution_column_map.h" -#include "nodes/primnodes.h" /* diff --git a/src/backend/distributed/utils/enable_ssl.c b/src/backend/distributed/utils/enable_ssl.c index 35b1e0f1a..261225450 100644 --- a/src/backend/distributed/utils/enable_ssl.c +++ b/src/backend/distributed/utils/enable_ssl.c @@ -18,16 +18,18 @@ * it otherwise we get warnings about redefining this value. This needs to be * done before including libpq.h. */ +#include "miscadmin.h" + +#include "libpq/libpq.h" +#include "nodes/parsenodes.h" +#include "postmaster/postmaster.h" +#include "utils/guc.h" + #include "pg_version_constants.h" #include "distributed/connection_management.h" #include "distributed/memutils.h" #include "distributed/worker_protocol.h" -#include "libpq/libpq.h" -#include "miscadmin.h" -#include "nodes/parsenodes.h" -#include "postmaster/postmaster.h" -#include "utils/guc.h" #ifdef USE_OPENSSL #include "openssl/dsa.h" diff --git a/src/backend/distributed/utils/errormessage.c b/src/backend/distributed/utils/errormessage.c index 72758f9ca..dbc55019d 100644 --- a/src/backend/distributed/utils/errormessage.c +++ b/src/backend/distributed/utils/errormessage.c @@ -6,13 +6,14 @@ */ #include "postgres.h" -#include "utils/memutils.h" #include "common/sha2.h" +#include "utils/builtins.h" +#include "utils/memutils.h" + #include "distributed/citus_nodes.h" #include "distributed/errormessage.h" #include "distributed/log_utils.h" -#include "utils/builtins.h" /* diff --git a/src/backend/distributed/utils/foreign_key_relationship.c b/src/backend/distributed/utils/foreign_key_relationship.c index d69d9044d..1abb7ae07 100644 --- a/src/backend/distributed/utils/foreign_key_relationship.c +++ b/src/backend/distributed/utils/foreign_key_relationship.c @@ -12,29 +12,29 @@ #include "postgres.h" -#include "pg_version_constants.h" - #include "access/genam.h" #include "access/htup_details.h" #include "access/stratnum.h" #include "access/table.h" #include "catalog/pg_constraint.h" -#include "distributed/commands.h" -#include "distributed/hash_helpers.h" -#include "distributed/foreign_key_relationship.h" -#include "distributed/hash_helpers.h" -#include "distributed/listutils.h" -#include "distributed/metadata_cache.h" -#include "distributed/version_compat.h" +#include "common/hashfn.h" #include "nodes/pg_list.h" #include "storage/lockdefs.h" #include "utils/catcache.h" #include "utils/fmgroids.h" #include "utils/hsearch.h" -#include "common/hashfn.h" #include "utils/inval.h" #include "utils/memutils.h" +#include "pg_version_constants.h" + +#include "distributed/commands.h" +#include "distributed/foreign_key_relationship.h" +#include "distributed/hash_helpers.h" +#include "distributed/listutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/version_compat.h" + /* * ForeignConstraintRelationshipGraph holds the graph data structure for foreign constraint relationship diff --git a/src/backend/distributed/utils/function.c b/src/backend/distributed/utils/function.c index bfb59181c..dcfcff6fe 100644 --- a/src/backend/distributed/utils/function.c +++ b/src/backend/distributed/utils/function.c @@ -10,13 +10,15 @@ */ #include "postgres.h" + #include "fmgr.h" #include "miscadmin.h" #include "commands/defrem.h" -#include "distributed/utils/function.h" #include "utils/lsyscache.h" +#include "distributed/utils/function.h" + /* * GetFunctionInfo first resolves the operator for the given data type, access diff --git a/src/backend/distributed/utils/function_utils.c b/src/backend/distributed/utils/function_utils.c index 48f878e13..0770b8cb9 100644 --- a/src/backend/distributed/utils/function_utils.c +++ b/src/backend/distributed/utils/function_utils.c @@ -10,12 +10,13 @@ #include "postgres.h" #include "catalog/namespace.h" -#include "distributed/function_utils.h" -#include "distributed/version_compat.h" #include "executor/executor.h" #include "utils/builtins.h" #include "utils/regproc.h" +#include "distributed/function_utils.h" +#include "distributed/version_compat.h" + /* * FunctionOid searches for a function that has the given name and the given diff --git a/src/backend/distributed/utils/hash_helpers.c b/src/backend/distributed/utils/hash_helpers.c index d2bfe38fa..2aaaaef12 100644 --- a/src/backend/distributed/utils/hash_helpers.c +++ b/src/backend/distributed/utils/hash_helpers.c @@ -11,9 +11,10 @@ #include "postgres.h" #include "common/hashfn.h" +#include "utils/hsearch.h" + #include "distributed/citus_safe_lib.h" #include "distributed/hash_helpers.h" -#include "utils/hsearch.h" /* diff --git a/src/backend/distributed/utils/jsonbutils.c b/src/backend/distributed/utils/jsonbutils.c index 4855ee004..47e6aa2c7 100644 --- a/src/backend/distributed/utils/jsonbutils.c +++ b/src/backend/distributed/utils/jsonbutils.c @@ -1,21 +1,21 @@ #include "postgres.h" -#include "pg_version_compat.h" +#include "fmgr.h" #include "catalog/namespace.h" #include "catalog/pg_class.h" #include "catalog/pg_collation.h" #include "catalog/pg_type.h" - #include "utils/array.h" +#include "utils/builtins.h" #include "utils/json.h" +#include "utils/lsyscache.h" + +#include "pg_version_compat.h" + #include "distributed/jsonbutils.h" #include "distributed/metadata_cache.h" -#include "utils/builtins.h" -#include "utils/lsyscache.h" -#include "fmgr.h" - /* * ExtractFieldJsonb gets value of fieldName from jsonbDoc and puts it diff --git a/src/backend/distributed/utils/listutils.c b/src/backend/distributed/utils/listutils.c index dd54443c4..eddef1fea 100644 --- a/src/backend/distributed/utils/listutils.c +++ b/src/backend/distributed/utils/listutils.c @@ -10,15 +10,17 @@ */ #include "postgres.h" + #include "c.h" #include "port.h" -#include "utils/lsyscache.h" #include "lib/stringinfo.h" +#include "nodes/pg_list.h" +#include "utils/lsyscache.h" +#include "utils/memutils.h" + #include "distributed/citus_safe_lib.h" #include "distributed/listutils.h" -#include "nodes/pg_list.h" -#include "utils/memutils.h" /* diff --git a/src/backend/distributed/utils/log_utils.c b/src/backend/distributed/utils/log_utils.c index 7d808591b..2e9d94c44 100644 --- a/src/backend/distributed/utils/log_utils.c +++ b/src/backend/distributed/utils/log_utils.c @@ -9,16 +9,15 @@ #include "postgres.h" +#include "common/cryptohash.h" +#include "common/sha2.h" +#include "utils/builtins.h" +#include "utils/guc.h" + #include "pg_version_constants.h" -#include "utils/guc.h" -#include "distributed/log_utils.h" #include "distributed/errormessage.h" -#include "common/sha2.h" - -#include "utils/builtins.h" - -#include "common/cryptohash.h" +#include "distributed/log_utils.h" /* diff --git a/src/backend/distributed/utils/maintenanced.c b/src/backend/distributed/utils/maintenanced.c index 851335abe..9cef13539 100644 --- a/src/backend/distributed/utils/maintenanced.c +++ b/src/backend/distributed/utils/maintenanced.c @@ -14,52 +14,52 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" - -#include "pg_version_constants.h" - #include +#include "postgres.h" + #include "miscadmin.h" #include "pgstat.h" #include "access/xact.h" #include "access/xlog.h" -#include "catalog/pg_extension.h" -#include "citus_version.h" +#include "catalog/namespace.h" #include "catalog/pg_authid.h" +#include "catalog/pg_extension.h" #include "catalog/pg_namespace.h" #include "commands/async.h" #include "commands/extension.h" +#include "common/hashfn.h" #include "libpq/pqsignal.h" -#include "catalog/namespace.h" -#include "distributed/background_jobs.h" -#include "distributed/citus_safe_lib.h" -#include "distributed/distributed_deadlock_detection.h" -#include "distributed/maintenanced.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata_cache.h" -#include "distributed/shard_cleaner.h" -#include "distributed/metadata_sync.h" -#include "distributed/query_stats.h" -#include "distributed/statistics_collection.h" -#include "distributed/transaction_recovery.h" -#include "distributed/version_compat.h" #include "nodes/makefuncs.h" #include "postmaster/bgworker.h" #include "postmaster/postmaster.h" -#include "nodes/makefuncs.h" #include "storage/ipc.h" -#include "storage/proc.h" #include "storage/latch.h" #include "storage/lmgr.h" #include "storage/lwlock.h" +#include "storage/proc.h" #include "tcop/tcopprot.h" -#include "common/hashfn.h" #include "utils/builtins.h" -#include "utils/memutils.h" #include "utils/lsyscache.h" +#include "utils/memutils.h" + +#include "citus_version.h" +#include "pg_version_constants.h" + +#include "distributed/background_jobs.h" +#include "distributed/citus_safe_lib.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/distributed_deadlock_detection.h" +#include "distributed/maintenanced.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_sync.h" +#include "distributed/query_stats.h" #include "distributed/resource_lock.h" +#include "distributed/shard_cleaner.h" +#include "distributed/statistics_collection.h" +#include "distributed/transaction_recovery.h" +#include "distributed/version_compat.h" /* * Shared memory data for all maintenance workers. diff --git a/src/backend/distributed/utils/multi_partitioning_utils.c b/src/backend/distributed/utils/multi_partitioning_utils.c index 404d792f9..ede2008ca 100644 --- a/src/backend/distributed/utils/multi_partitioning_utils.c +++ b/src/backend/distributed/utils/multi_partitioning_utils.c @@ -6,7 +6,7 @@ */ #include "postgres.h" -#include "pg_version_constants.h" +#include "pgstat.h" #include "access/genam.h" #include "access/heapam.h" @@ -19,8 +19,21 @@ #include "catalog/pg_inherits.h" #include "commands/tablecmds.h" #include "common/string.h" -#include "distributed/citus_nodes.h" +#include "lib/stringinfo.h" +#include "nodes/makefuncs.h" +#include "nodes/pg_list.h" +#include "partitioning/partdesc.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/lsyscache.h" +#include "utils/rel.h" +#include "utils/syscache.h" +#include "utils/varlena.h" + +#include "pg_version_constants.h" + #include "distributed/adaptive_executor.h" +#include "distributed/citus_nodes.h" #include "distributed/citus_ruleutils.h" #include "distributed/colocation_utils.h" #include "distributed/commands.h" @@ -36,17 +49,6 @@ #include "distributed/shardinterval_utils.h" #include "distributed/version_compat.h" #include "distributed/worker_protocol.h" -#include "lib/stringinfo.h" -#include "nodes/makefuncs.h" -#include "nodes/pg_list.h" -#include "pgstat.h" -#include "partitioning/partdesc.h" -#include "utils/builtins.h" -#include "utils/fmgroids.h" -#include "utils/lsyscache.h" -#include "utils/rel.h" -#include "utils/syscache.h" -#include "utils/varlena.h" static char * PartitionBound(Oid partitionId); static Relation try_relation_open_nolock(Oid relationId); diff --git a/src/backend/distributed/utils/namespace_utils.c b/src/backend/distributed/utils/namespace_utils.c index 4f822b7d2..a5401b00c 100644 --- a/src/backend/distributed/utils/namespace_utils.c +++ b/src/backend/distributed/utils/namespace_utils.c @@ -11,10 +11,11 @@ #include "postgres.h" -#include "distributed/namespace_utils.h" #include "utils/guc.h" #include "utils/regproc.h" +#include "distributed/namespace_utils.h" + /* * We use the equivalent of a function SET option to allow the setting to * persist for the exact duration of the transaction, guc.c takes care of diff --git a/src/backend/distributed/utils/param_utils.c b/src/backend/distributed/utils/param_utils.c index 8aefecb7d..a500b5b65 100644 --- a/src/backend/distributed/utils/param_utils.c +++ b/src/backend/distributed/utils/param_utils.c @@ -9,12 +9,13 @@ #include "postgres.h" -#include -#include -#include -#include -#include -#include +#include "nodes/bitmapset.h" +#include "nodes/nodeFuncs.h" +#include "nodes/nodes.h" +#include "nodes/params.h" +#include "nodes/parsenodes.h" +#include "nodes/primnodes.h" + #include "distributed/param_utils.h" /* diff --git a/src/backend/distributed/utils/priority.c b/src/backend/distributed/utils/priority.c index 2e7972d2d..ceb75ac26 100644 --- a/src/backend/distributed/utils/priority.c +++ b/src/backend/distributed/utils/priority.c @@ -7,13 +7,13 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" - -#include #include #include #include #include +#include + +#include "postgres.h" #include "distributed/priority.h" diff --git a/src/backend/distributed/utils/query_utils.c b/src/backend/distributed/utils/query_utils.c index 4ae49ed81..ac33bdd52 100644 --- a/src/backend/distributed/utils/query_utils.c +++ b/src/backend/distributed/utils/query_utils.c @@ -11,13 +11,14 @@ */ #include "postgres.h" -#include "nodes/primnodes.h" #include "catalog/pg_class.h" +#include "nodes/nodeFuncs.h" +#include "nodes/primnodes.h" + +#include "distributed/listutils.h" #include "distributed/query_utils.h" #include "distributed/version_compat.h" -#include "distributed/listutils.h" -#include "nodes/nodeFuncs.h" static bool CitusQueryableRangeTableRelation(RangeTblEntry *rangeTableEntry); diff --git a/src/backend/distributed/utils/reference_table_utils.c b/src/backend/distributed/utils/reference_table_utils.c index 314044ab5..b1710c1d6 100644 --- a/src/backend/distributed/utils/reference_table_utils.c +++ b/src/backend/distributed/utils/reference_table_utils.c @@ -10,19 +10,27 @@ */ #include "postgres.h" + #include "miscadmin.h" +#include "access/genam.h" #include "access/heapam.h" #include "access/htup_details.h" -#include "access/genam.h" +#include "postmaster/postmaster.h" +#include "storage/lmgr.h" +#include "utils/builtins.h" +#include "utils/fmgroids.h" +#include "utils/lsyscache.h" +#include "utils/rel.h" + #include "distributed/backend_data.h" #include "distributed/colocation_utils.h" #include "distributed/commands.h" -#include "distributed/listutils.h" #include "distributed/coordinator_protocol.h" -#include "distributed/metadata_utility.h" +#include "distributed/listutils.h" #include "distributed/metadata_cache.h" #include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" #include "distributed/multi_executor.h" #include "distributed/multi_logical_planner.h" #include "distributed/reference_table_utils.h" @@ -33,12 +41,6 @@ #include "distributed/transaction_management.h" #include "distributed/worker_manager.h" #include "distributed/worker_transaction.h" -#include "postmaster/postmaster.h" -#include "storage/lmgr.h" -#include "utils/builtins.h" -#include "utils/fmgroids.h" -#include "utils/lsyscache.h" -#include "utils/rel.h" /* local function forward declarations */ static List * WorkersWithoutReferenceTablePlacement(uint64 shardId, LOCKMODE lockMode); diff --git a/src/backend/distributed/utils/replication_origin_session_utils.c b/src/backend/distributed/utils/replication_origin_session_utils.c index 800d82ef7..370b061be 100644 --- a/src/backend/distributed/utils/replication_origin_session_utils.c +++ b/src/backend/distributed/utils/replication_origin_session_utils.c @@ -7,13 +7,16 @@ * *------------------------------------------------------------------------- */ +#include "postgres.h" -#include "distributed/replication_origin_session_utils.h" -#include "distributed/remote_commands.h" -#include "distributed/metadata_cache.h" -#include "utils/builtins.h" #include "miscadmin.h" +#include "utils/builtins.h" + +#include "distributed/metadata_cache.h" +#include "distributed/remote_commands.h" +#include "distributed/replication_origin_session_utils.h" + static bool IsRemoteReplicationOriginSessionSetup(MultiConnection *connection); static void SetupMemoryContextResetReplicationOriginHandler(void); diff --git a/src/backend/distributed/utils/resource_lock.c b/src/backend/distributed/utils/resource_lock.c index c76830c1d..13e88a16e 100644 --- a/src/backend/distributed/utils/resource_lock.c +++ b/src/backend/distributed/utils/resource_lock.c @@ -14,39 +14,41 @@ */ #include "postgres.h" + #include "c.h" #include "miscadmin.h" #include "access/xact.h" #include "catalog/namespace.h" #include "commands/tablecmds.h" -#include "distributed/colocation_utils.h" -#include "distributed/commands.h" -#include "distributed/listutils.h" -#include "distributed/metadata_utility.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata_sync.h" -#include "distributed/multi_executor.h" -#include "distributed/multi_join_order.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/distributed_planner.h" -#include "distributed/relay_utility.h" -#include "distributed/reference_table_utils.h" -#include "distributed/remote_commands.h" -#include "distributed/resource_lock.h" -#include "distributed/shardinterval_utils.h" -#include "distributed/worker_protocol.h" -#include "distributed/worker_transaction.h" -#include "distributed/utils/array_type.h" -#include "distributed/version_compat.h" -#include "distributed/local_executor.h" -#include "distributed/worker_shard_visibility.h" #include "storage/lmgr.h" #include "utils/builtins.h" #include "utils/lsyscache.h" #include "utils/varlena.h" +#include "distributed/colocation_utils.h" +#include "distributed/commands.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/distributed_planner.h" +#include "distributed/listutils.h" +#include "distributed/local_executor.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_executor.h" +#include "distributed/multi_join_order.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/reference_table_utils.h" +#include "distributed/relay_utility.h" +#include "distributed/remote_commands.h" +#include "distributed/resource_lock.h" +#include "distributed/shardinterval_utils.h" +#include "distributed/utils/array_type.h" +#include "distributed/version_compat.h" +#include "distributed/worker_protocol.h" +#include "distributed/worker_shard_visibility.h" +#include "distributed/worker_transaction.h" + #define LOCK_RELATION_IF_EXISTS \ "SELECT pg_catalog.lock_relation_if_exists(%s, %s);" diff --git a/src/backend/distributed/utils/role.c b/src/backend/distributed/utils/role.c index 3a9a90f9f..9e92a3290 100644 --- a/src/backend/distributed/utils/role.c +++ b/src/backend/distributed/utils/role.c @@ -10,13 +10,15 @@ */ #include "postgres.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/worker_protocol.h" #include "fmgr.h" + #include "tcop/dest.h" #include "tcop/utility.h" #include "utils/builtins.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/worker_protocol.h" + PG_FUNCTION_INFO_V1(alter_role_if_exists); PG_FUNCTION_INFO_V1(worker_create_or_alter_role); diff --git a/src/backend/distributed/utils/shard_utils.c b/src/backend/distributed/utils/shard_utils.c index d6d41f192..cd688b745 100644 --- a/src/backend/distributed/utils/shard_utils.c +++ b/src/backend/distributed/utils/shard_utils.c @@ -12,9 +12,11 @@ #include "postgres.h" #include "miscadmin.h" + #include "utils/builtins.h" #include "utils/fmgrprotos.h" #include "utils/lsyscache.h" + #include "distributed/coordinator_protocol.h" #include "distributed/listutils.h" #include "distributed/log_utils.h" diff --git a/src/backend/distributed/utils/shardinterval_utils.c b/src/backend/distributed/utils/shardinterval_utils.c index 6c18e201e..16d43ffdc 100644 --- a/src/backend/distributed/utils/shardinterval_utils.c +++ b/src/backend/distributed/utils/shardinterval_utils.c @@ -8,23 +8,25 @@ * *------------------------------------------------------------------------- */ -#include "stdint.h" #include "postgres.h" +#include "stdint.h" + #include "access/nbtree.h" #include "catalog/pg_am.h" #include "catalog/pg_collation.h" #include "catalog/pg_type.h" +#include "utils/catcache.h" +#include "utils/memutils.h" + +#include "distributed/distributed_planner.h" #include "distributed/listutils.h" #include "distributed/metadata_cache.h" #include "distributed/multi_join_order.h" -#include "distributed/distributed_planner.h" +#include "distributed/pg_dist_partition.h" #include "distributed/shard_pruning.h" #include "distributed/shardinterval_utils.h" -#include "distributed/pg_dist_partition.h" #include "distributed/worker_protocol.h" -#include "utils/catcache.h" -#include "utils/memutils.h" /* diff --git a/src/backend/distributed/utils/statistics_collection.c b/src/backend/distributed/utils/statistics_collection.c index a442aac95..1cadea968 100644 --- a/src/backend/distributed/utils/statistics_collection.c +++ b/src/backend/distributed/utils/statistics_collection.c @@ -10,10 +10,12 @@ #include "postgres.h" -#include "citus_version.h" #include "fmgr.h" + #include "utils/uuid.h" +#include "citus_version.h" + #if defined(HAVE_LIBCURL) && defined(ENABLE_CITUS_STATISTICS_COLLECTION) bool EnableStatisticsCollection = true; /* send basic usage statistics to Citus */ #else @@ -28,18 +30,19 @@ PG_FUNCTION_INFO_V1(citus_server_id); #include #include "access/xact.h" +#include "lib/stringinfo.h" +#include "utils/builtins.h" +#include "utils/fmgrprotos.h" +#include "utils/json.h" +#include "utils/jsonb.h" + #include "distributed/listutils.h" #include "distributed/metadata_cache.h" #include "distributed/multi_join_order.h" #include "distributed/shardinterval_utils.h" #include "distributed/statistics_collection.h" -#include "distributed/worker_manager.h" #include "distributed/version_compat.h" -#include "lib/stringinfo.h" -#include "utils/builtins.h" -#include "utils/json.h" -#include "utils/jsonb.h" -#include "utils/fmgrprotos.h" +#include "distributed/worker_manager.h" static size_t StatisticsCallback(char *contents, size_t size, size_t count, void *userData); diff --git a/src/backend/distributed/utils/task_execution_utils.c b/src/backend/distributed/utils/task_execution_utils.c index 7251514b5..5a6f74283 100644 --- a/src/backend/distributed/utils/task_execution_utils.c +++ b/src/backend/distributed/utils/task_execution_utils.c @@ -1,16 +1,21 @@ -#include "postgres.h" -#include "miscadmin.h" - +#include #include #include -#include + +#include "postgres.h" + +#include "miscadmin.h" + +#include "commands/dbcommands.h" +#include "common/hashfn.h" +#include "storage/fd.h" +#include "utils/builtins.h" +#include "utils/hsearch.h" +#include "utils/timestamp.h" #include "pg_version_constants.h" -#include "common/hashfn.h" - -#include "commands/dbcommands.h" #include "distributed/citus_custom_scan.h" #include "distributed/citus_nodes.h" #include "distributed/connection_management.h" @@ -27,12 +32,8 @@ #include "distributed/resource_lock.h" #include "distributed/subplan_execution.h" #include "distributed/task_execution_utils.h" -#include "distributed/worker_protocol.h" #include "distributed/version_compat.h" -#include "storage/fd.h" -#include "utils/builtins.h" -#include "utils/hsearch.h" -#include "utils/timestamp.h" +#include "distributed/worker_protocol.h" /* TaskMapKey is used as a key in task hash */ typedef struct TaskMapKey diff --git a/src/backend/distributed/utils/tenant_schema_metadata.c b/src/backend/distributed/utils/tenant_schema_metadata.c index e634795a2..57ae1d151 100644 --- a/src/backend/distributed/utils/tenant_schema_metadata.c +++ b/src/backend/distributed/utils/tenant_schema_metadata.c @@ -14,14 +14,15 @@ #include "access/genam.h" #include "access/htup.h" #include "access/table.h" +#include "storage/lockdefs.h" +#include "utils/fmgroids.h" +#include "utils/relcache.h" + #include "distributed/colocation_utils.h" #include "distributed/metadata_cache.h" #include "distributed/metadata_sync.h" #include "distributed/pg_dist_schema.h" #include "distributed/tenant_schema_metadata.h" -#include "storage/lockdefs.h" -#include "utils/relcache.h" -#include "utils/fmgroids.h" /* diff --git a/src/backend/distributed/utils/tuplestore.c b/src/backend/distributed/utils/tuplestore.c index 4473c1f3e..ea59e7040 100644 --- a/src/backend/distributed/utils/tuplestore.c +++ b/src/backend/distributed/utils/tuplestore.c @@ -10,9 +10,10 @@ #include "postgres.h" -#include "distributed/tuplestore.h" #include "miscadmin.h" +#include "distributed/tuplestore.h" + /* * CheckTuplestoreReturn checks if a tuplestore can be returned in the callsite * of the UDF. diff --git a/src/backend/distributed/utils/type_utils.c b/src/backend/distributed/utils/type_utils.c index 66a924a02..fca331374 100644 --- a/src/backend/distributed/utils/type_utils.c +++ b/src/backend/distributed/utils/type_utils.c @@ -10,13 +10,14 @@ */ #include "postgres.h" + #include "fmgr.h" #include "libpq-fe.h" #include "catalog/pg_type.h" +#include "libpq/pqformat.h" #include "nodes/pg_list.h" #include "utils/syscache.h" -#include "libpq/pqformat.h" #include "distributed/causal_clock.h" diff --git a/src/backend/distributed/worker/task_tracker_protocol.c b/src/backend/distributed/worker/task_tracker_protocol.c index 9b2016f67..abe1f765e 100644 --- a/src/backend/distributed/worker/task_tracker_protocol.c +++ b/src/backend/distributed/worker/task_tracker_protocol.c @@ -12,6 +12,7 @@ */ #include "postgres.h" + #include "funcapi.h" #include "miscadmin.h" diff --git a/src/backend/distributed/worker/worker_create_or_replace.c b/src/backend/distributed/worker/worker_create_or_replace.c index 804e71125..2fab84ac6 100644 --- a/src/backend/distributed/worker/worker_create_or_replace.c +++ b/src/backend/distributed/worker/worker_create_or_replace.c @@ -9,23 +9,24 @@ #include "postgres.h" +#include "fmgr.h" +#include "funcapi.h" + #include "access/htup_details.h" #include "catalog/dependency.h" #include "catalog/pg_collation.h" #include "catalog/pg_proc.h" #include "catalog/pg_ts_config.h" #include "catalog/pg_type.h" -#include "fmgr.h" -#include "funcapi.h" #include "nodes/makefuncs.h" #include "nodes/nodes.h" #include "parser/parse_type.h" #include "tcop/dest.h" #include "tcop/utility.h" #include "utils/builtins.h" -#include "utils/syscache.h" #include "utils/lsyscache.h" #include "utils/regproc.h" +#include "utils/syscache.h" #include "distributed/commands.h" #include "distributed/commands/utility_hook.h" diff --git a/src/backend/distributed/worker/worker_data_fetch_protocol.c b/src/backend/distributed/worker/worker_data_fetch_protocol.c index 11fdda287..f51d9c80c 100644 --- a/src/backend/distributed/worker/worker_data_fetch_protocol.c +++ b/src/backend/distributed/worker/worker_data_fetch_protocol.c @@ -12,12 +12,14 @@ *------------------------------------------------------------------------- */ +#include +#include + #include "postgres.h" + #include "funcapi.h" #include "libpq-fe.h" #include "miscadmin.h" -#include -#include #include "access/xact.h" #include "catalog/dependency.h" @@ -27,6 +29,17 @@ #include "commands/dbcommands.h" #include "commands/extension.h" #include "commands/sequence.h" +#include "executor/spi.h" +#include "nodes/makefuncs.h" +#include "parser/parse_relation.h" +#include "storage/lmgr.h" +#include "tcop/tcopprot.h" +#include "tcop/utility.h" +#include "utils/builtins.h" +#include "utils/lsyscache.h" +#include "utils/regproc.h" +#include "utils/varlena.h" + #include "distributed/citus_ruleutils.h" #include "distributed/commands.h" #include "distributed/commands/multi_copy.h" @@ -44,20 +57,9 @@ #include "distributed/relay_utility.h" #include "distributed/remote_commands.h" #include "distributed/resource_lock.h" - +#include "distributed/version_compat.h" #include "distributed/worker_create_or_replace.h" #include "distributed/worker_protocol.h" -#include "distributed/version_compat.h" -#include "executor/spi.h" -#include "nodes/makefuncs.h" -#include "parser/parse_relation.h" -#include "storage/lmgr.h" -#include "tcop/tcopprot.h" -#include "tcop/utility.h" -#include "utils/builtins.h" -#include "utils/lsyscache.h" -#include "utils/regproc.h" -#include "utils/varlena.h" /* Local functions forward declarations */ diff --git a/src/backend/distributed/worker/worker_drop_protocol.c b/src/backend/distributed/worker/worker_drop_protocol.c index 16b7bb66a..6d7b5326a 100644 --- a/src/backend/distributed/worker/worker_drop_protocol.c +++ b/src/backend/distributed/worker/worker_drop_protocol.c @@ -19,22 +19,23 @@ #include "catalog/dependency.h" #include "catalog/pg_depend.h" #include "catalog/pg_foreign_server.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/distribution_column.h" -#include "distributed/listutils.h" -#include "distributed/metadata_utility.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/commands/utility_hook.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata/distobject.h" -#include "distributed/multi_partitioning_utils.h" -#include "distributed/worker_protocol.h" #include "foreign/foreign.h" #include "tcop/utility.h" #include "utils/builtins.h" #include "utils/fmgroids.h" #include "utils/lsyscache.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/commands/utility_hook.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/distribution_column.h" +#include "distributed/listutils.h" +#include "distributed/metadata/distobject.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_partitioning_utils.h" +#include "distributed/worker_protocol.h" + PG_FUNCTION_INFO_V1(worker_drop_distributed_table); PG_FUNCTION_INFO_V1(worker_drop_shell_table); PG_FUNCTION_INFO_V1(worker_drop_sequence_dependency); diff --git a/src/backend/distributed/worker/worker_partition_protocol.c b/src/backend/distributed/worker/worker_partition_protocol.c index 2291633d4..cdbda6d3e 100644 --- a/src/backend/distributed/worker/worker_partition_protocol.c +++ b/src/backend/distributed/worker/worker_partition_protocol.c @@ -10,6 +10,7 @@ */ #include "postgres.h" + #include "funcapi.h" #include "miscadmin.h" diff --git a/src/backend/distributed/worker/worker_shard_visibility.c b/src/backend/distributed/worker/worker_shard_visibility.c index 63a9cca34..49131ef6d 100644 --- a/src/backend/distributed/worker/worker_shard_visibility.c +++ b/src/backend/distributed/worker/worker_shard_visibility.c @@ -8,26 +8,28 @@ */ #include "postgres.h" + #include "miscadmin.h" #include "catalog/index.h" #include "catalog/namespace.h" #include "catalog/pg_class.h" #include "catalog/pg_type.h" -#include "distributed/backend_data.h" -#include "distributed/metadata_cache.h" -#include "distributed/coordinator_protocol.h" -#include "distributed/listutils.h" -#include "distributed/local_executor.h" -#include "distributed/query_colocation_checker.h" -#include "distributed/worker_protocol.h" -#include "distributed/worker_shard_visibility.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "utils/lsyscache.h" #include "utils/syscache.h" #include "utils/varlena.h" +#include "distributed/backend_data.h" +#include "distributed/coordinator_protocol.h" +#include "distributed/listutils.h" +#include "distributed/local_executor.h" +#include "distributed/metadata_cache.h" +#include "distributed/query_colocation_checker.h" +#include "distributed/worker_protocol.h" +#include "distributed/worker_shard_visibility.h" + /* HideShardsMode is used to determine whether to hide shards */ typedef enum HideShardsMode diff --git a/src/backend/distributed/worker/worker_sql_task_protocol.c b/src/backend/distributed/worker/worker_sql_task_protocol.c index 38dba5e35..2cf48fc6f 100644 --- a/src/backend/distributed/worker/worker_sql_task_protocol.c +++ b/src/backend/distributed/worker/worker_sql_task_protocol.c @@ -9,20 +9,23 @@ *------------------------------------------------------------------------- */ +/* necessary to get S_IRUSR, S_IWUSR definitions on illumos */ +#include + #include "postgres.h" + #include "funcapi.h" #include "pgstat.h" +#include "utils/builtins.h" +#include "utils/memutils.h" + #include "distributed/commands/multi_copy.h" #include "distributed/multi_executor.h" #include "distributed/transmit.h" #include "distributed/version_compat.h" #include "distributed/worker_protocol.h" -#include "utils/builtins.h" -#include "utils/memutils.h" -/* necessary to get S_IRUSR, S_IWUSR definitions on illumos */ -#include #define COPY_BUFFER_SIZE (4 * 1024 * 1024) diff --git a/src/backend/distributed/worker/worker_truncate_trigger_protocol.c b/src/backend/distributed/worker/worker_truncate_trigger_protocol.c index dc4e7ffd8..3f8f96b2d 100644 --- a/src/backend/distributed/worker/worker_truncate_trigger_protocol.c +++ b/src/backend/distributed/worker/worker_truncate_trigger_protocol.c @@ -12,16 +12,18 @@ */ #include "postgres.h" + #include "fmgr.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/metadata_utility.h" -#include "distributed/metadata_cache.h" -#include "distributed/metadata_sync.h" #include "utils/elog.h" #include "utils/fmgroids.h" #include "utils/lsyscache.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_sync.h" +#include "distributed/metadata_utility.h" + PG_FUNCTION_INFO_V1(worker_create_truncate_trigger); diff --git a/src/include/columnar/columnar.h b/src/include/columnar/columnar.h index 64cf745e1..66413dddd 100644 --- a/src/include/columnar/columnar.h +++ b/src/include/columnar/columnar.h @@ -14,21 +14,24 @@ #include "postgres.h" #include "fmgr.h" + #include "lib/stringinfo.h" #include "nodes/parsenodes.h" -#include "pg_version_compat.h" #include "storage/bufpage.h" #include "storage/lockdefs.h" +#include "utils/relcache.h" +#include "utils/snapmgr.h" + +#include "pg_version_compat.h" + +#include "columnar/columnar_compression.h" +#include "columnar/columnar_metadata.h" + #if PG_VERSION_NUM >= PG_VERSION_16 #include "storage/relfilelocator.h" #else #include "storage/relfilenode.h" #endif -#include "utils/relcache.h" -#include "utils/snapmgr.h" - -#include "columnar/columnar_compression.h" -#include "columnar/columnar_metadata.h" #define COLUMNAR_AM_NAME "columnar" #define COLUMNAR_MODULE_NAME "citus_columnar" diff --git a/src/include/columnar/columnar_metadata.h b/src/include/columnar/columnar_metadata.h index 2af4354a0..64867ae2f 100644 --- a/src/include/columnar/columnar_metadata.h +++ b/src/include/columnar/columnar_metadata.h @@ -12,7 +12,17 @@ #ifndef COLUMNAR_METADATA_H #define COLUMNAR_METADATA_H +#include "postgres.h" + #include "pg_version_compat.h" +#include "pg_version_constants.h" + +#if PG_VERSION_NUM >= PG_VERSION_16 +#include "storage/relfilelocator.h" +#else +#include "storage/relfilenode.h" +#endif + /* * StripeMetadata represents information about a stripe. This information is diff --git a/src/include/columnar/columnar_tableam.h b/src/include/columnar/columnar_tableam.h index 657491ef8..18331bd70 100644 --- a/src/include/columnar/columnar_tableam.h +++ b/src/include/columnar/columnar_tableam.h @@ -1,16 +1,18 @@ #ifndef COLUMNAR_TABLEAM_H #define COLUMNAR_TABLEAM_H -#include "citus_version.h" - #include "postgres.h" + #include "fmgr.h" -#include "access/tableam.h" -#include "access/skey.h" -#include "nodes/bitmapset.h" + #include "access/heapam.h" +#include "access/skey.h" +#include "access/tableam.h" #include "catalog/indexing.h" +#include "nodes/bitmapset.h" #include "utils/acl.h" +#include "citus_version.h" + /* * Number of valid ItemPointer Offset's for "row number" <> "ItemPointer" * mapping. diff --git a/src/include/distributed/backend_data.h b/src/include/distributed/backend_data.h index 1fcd31141..8014fe5a6 100644 --- a/src/include/distributed/backend_data.h +++ b/src/include/distributed/backend_data.h @@ -15,12 +15,13 @@ #include "access/twophase.h" #include "datatype/timestamp.h" -#include "distributed/transaction_identifier.h" #include "nodes/pg_list.h" #include "storage/lwlock.h" #include "storage/proc.h" #include "storage/s_lock.h" +#include "distributed/transaction_identifier.h" + /* * Each backend's active distributed transaction information is tracked via diff --git a/src/include/distributed/citus_custom_scan.h b/src/include/distributed/citus_custom_scan.h index a3da4958c..db1f0ce1f 100644 --- a/src/include/distributed/citus_custom_scan.h +++ b/src/include/distributed/citus_custom_scan.h @@ -10,11 +10,12 @@ #ifndef CITUS_CUSTOM_SCAN_H #define CITUS_CUSTOM_SCAN_H -#include "distributed/distributed_planner.h" -#include "distributed/multi_server_executor.h" #include "executor/execdesc.h" #include "nodes/plannodes.h" +#include "distributed/distributed_planner.h" +#include "distributed/multi_server_executor.h" + typedef struct CitusScanState { CustomScanState customScanState; /* underlying custom scan node */ diff --git a/src/include/distributed/citus_depended_object.h b/src/include/distributed/citus_depended_object.h index b52018411..1efbe4e2a 100644 --- a/src/include/distributed/citus_depended_object.h +++ b/src/include/distributed/citus_depended_object.h @@ -12,10 +12,11 @@ #ifndef CITUS_DEPENDED_OBJECT_H #define CITUS_DEPENDED_OBJECT_H -#include "distributed/commands.h" #include "nodes/nodes.h" #include "nodes/parsenodes.h" +#include "distributed/commands.h" + extern bool HideCitusDependentObjects; /* DistOpsValidationState to be used to determine validity of dist ops */ diff --git a/src/include/distributed/citus_nodefuncs.h b/src/include/distributed/citus_nodefuncs.h index caeda3a72..f7c0061b9 100644 --- a/src/include/distributed/citus_nodefuncs.h +++ b/src/include/distributed/citus_nodefuncs.h @@ -11,10 +11,11 @@ #ifndef CITUS_NODEFUNCS_H #define CITUS_NODEFUNCS_H -#include "distributed/multi_physical_planner.h" #include "nodes/nodes.h" #include "nodes/parsenodes.h" +#include "distributed/multi_physical_planner.h" + /* citus_nodefuncs.c */ extern void SetRangeTblExtraData(RangeTblEntry *rte, CitusRTEKind rteKind, char *fragmentSchemaName, char *fragmentTableName, diff --git a/src/include/distributed/citus_ruleutils.h b/src/include/distributed/citus_ruleutils.h index e45ddb269..3a9c36482 100644 --- a/src/include/distributed/citus_ruleutils.h +++ b/src/include/distributed/citus_ruleutils.h @@ -15,11 +15,12 @@ #include "catalog/pg_sequence.h" #include "commands/sequence.h" -#include "distributed/coordinator_protocol.h" #include "lib/stringinfo.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" +#include "distributed/coordinator_protocol.h" + /* Function declarations for version independent Citus ruleutils wrapper functions */ extern char * pg_get_extensiondef_string(Oid tableRelationId); extern Oid get_extension_schema(Oid ext_oid); diff --git a/src/include/distributed/colocation_utils.h b/src/include/distributed/colocation_utils.h index bba78afd1..018f97570 100644 --- a/src/include/distributed/colocation_utils.h +++ b/src/include/distributed/colocation_utils.h @@ -12,9 +12,10 @@ #ifndef COLOCATION_UTILS_H_ #define COLOCATION_UTILS_H_ -#include "distributed/shardinterval_utils.h" #include "nodes/pg_list.h" +#include "distributed/shardinterval_utils.h" + #define INVALID_COLOCATION_ID 0 extern uint32 TableColocationId(Oid distributedTableId); diff --git a/src/include/distributed/combine_query_planner.h b/src/include/distributed/combine_query_planner.h index 710010913..2afc8aa5f 100644 --- a/src/include/distributed/combine_query_planner.h +++ b/src/include/distributed/combine_query_planner.h @@ -14,9 +14,8 @@ #include "lib/stringinfo.h" #include "nodes/parsenodes.h" -#include "nodes/plannodes.h" - #include "nodes/pathnodes.h" +#include "nodes/plannodes.h" /* Function declarations for building local plans on the coordinator node */ diff --git a/src/include/distributed/commands.h b/src/include/distributed/commands.h index 501fefedd..8b6e9001a 100644 --- a/src/include/distributed/commands.h +++ b/src/include/distributed/commands.h @@ -15,12 +15,13 @@ #include "postgres.h" -#include "distributed/metadata_utility.h" -#include "utils/rel.h" #include "nodes/parsenodes.h" #include "tcop/dest.h" #include "tcop/utility.h" #include "utils/acl.h" +#include "utils/rel.h" + +#include "distributed/metadata_utility.h" extern bool AddAllLocalTablesToMetadata; diff --git a/src/include/distributed/commands/multi_copy.h b/src/include/distributed/commands/multi_copy.h index fa59894ad..1fc42df60 100644 --- a/src/include/distributed/commands/multi_copy.h +++ b/src/include/distributed/commands/multi_copy.h @@ -13,14 +13,15 @@ #define MULTI_COPY_H -#include "distributed/metadata_utility.h" -#include "distributed/metadata_cache.h" -#include "distributed/version_compat.h" #include "nodes/execnodes.h" #include "nodes/parsenodes.h" #include "parser/parse_coerce.h" #include "tcop/dest.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" +#include "distributed/version_compat.h" + #define INVALID_PARTITION_COLUMN_INDEX -1 diff --git a/src/include/distributed/commands/utility_hook.h b/src/include/distributed/commands/utility_hook.h index caac002ed..9046c7309 100644 --- a/src/include/distributed/commands/utility_hook.h +++ b/src/include/distributed/commands/utility_hook.h @@ -10,12 +10,12 @@ #ifndef MULTI_UTILITY_H #define MULTI_UTILITY_H -#include "pg_version_constants.h" - #include "postgres.h" -#include "utils/relcache.h" #include "tcop/utility.h" +#include "utils/relcache.h" + +#include "pg_version_constants.h" #include "distributed/coordinator_protocol.h" #include "distributed/function_call_delegation.h" diff --git a/src/include/distributed/connection_management.h b/src/include/distributed/connection_management.h index 158f0b1ce..9eadbde9d 100644 --- a/src/include/distributed/connection_management.h +++ b/src/include/distributed/connection_management.h @@ -13,16 +13,18 @@ #include "postgres.h" -#include "distributed/transaction_management.h" -#include "distributed/remote_transaction.h" -#include "lib/ilist.h" #include "pg_config.h" + +#include "lib/ilist.h" #include "portability/instr_time.h" #include "storage/latch.h" #include "utils/guc.h" #include "utils/hsearch.h" #include "utils/timestamp.h" +#include "distributed/remote_transaction.h" +#include "distributed/transaction_management.h" + /* maximum (textual) lengths of hostname and port */ #define MAX_NODE_LENGTH 255 /* includes 0 byte */ diff --git a/src/include/distributed/coordinator_protocol.h b/src/include/distributed/coordinator_protocol.h index 0dcc66141..b2170fd2e 100644 --- a/src/include/distributed/coordinator_protocol.h +++ b/src/include/distributed/coordinator_protocol.h @@ -13,16 +13,18 @@ #define COORDINATOR_PROTOCOL_H #include "postgres.h" + #include "c.h" #include "fmgr.h" -#include "distributed/connection_management.h" -#include "distributed/shardinterval_utils.h" #include "nodes/pg_list.h" -#include "distributed/metadata_utility.h" #include "columnar/columnar.h" +#include "distributed/connection_management.h" +#include "distributed/metadata_utility.h" +#include "distributed/shardinterval_utils.h" + /* * In our distributed database, we need a mechanism to make remote procedure * calls between clients, the coordinator node, and worker nodes. These remote calls diff --git a/src/include/distributed/deparse_shard_query.h b/src/include/distributed/deparse_shard_query.h index 9370e51e2..8fb012588 100644 --- a/src/include/distributed/deparse_shard_query.h +++ b/src/include/distributed/deparse_shard_query.h @@ -18,6 +18,7 @@ #include "nodes/nodes.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" + #include "distributed/citus_custom_scan.h" diff --git a/src/include/distributed/deparser.h b/src/include/distributed/deparser.h index f67e53238..d66bdb933 100644 --- a/src/include/distributed/deparser.h +++ b/src/include/distributed/deparser.h @@ -15,10 +15,10 @@ #include "postgres.h" -#include "nodes/nodes.h" -#include "nodes/parsenodes.h" #include "catalog/objectaddress.h" #include "lib/stringinfo.h" +#include "nodes/nodes.h" +#include "nodes/parsenodes.h" /* forward declarations for format_collate.c */ /* Control flags for FormatCollateExtended, compatible with format_type_extended */ diff --git a/src/include/distributed/distributed_deadlock_detection.h b/src/include/distributed/distributed_deadlock_detection.h index 23f6554ef..5f391cc70 100644 --- a/src/include/distributed/distributed_deadlock_detection.h +++ b/src/include/distributed/distributed_deadlock_detection.h @@ -14,11 +14,12 @@ #include "postgres.h" #include "access/hash.h" +#include "nodes/pg_list.h" + #include "distributed/backend_data.h" #include "distributed/listutils.h" #include "distributed/lock_graph.h" #include "distributed/transaction_identifier.h" -#include "nodes/pg_list.h" typedef struct TransactionNode { diff --git a/src/include/distributed/distributed_execution_locks.h b/src/include/distributed/distributed_execution_locks.h index e789843ae..3ca31b330 100644 --- a/src/include/distributed/distributed_execution_locks.h +++ b/src/include/distributed/distributed_execution_locks.h @@ -14,6 +14,7 @@ #include "nodes/pg_list.h" #include "storage/lockdefs.h" + #include "distributed/multi_physical_planner.h" extern void AcquireExecutorShardLocksForExecution(RowModifyLevel modLevel, diff --git a/src/include/distributed/distributed_planner.h b/src/include/distributed/distributed_planner.h index bc8f5bc94..d7234e4bc 100644 --- a/src/include/distributed/distributed_planner.h +++ b/src/include/distributed/distributed_planner.h @@ -12,11 +12,10 @@ #include "postgres.h" -#include "pg_version_constants.h" - +#include "nodes/pathnodes.h" #include "nodes/plannodes.h" -#include "nodes/pathnodes.h" +#include "pg_version_constants.h" #include "distributed/citus_nodes.h" #include "distributed/errormessage.h" diff --git a/src/include/distributed/enterprise.h b/src/include/distributed/enterprise.h index 26a882bd6..2ba2fa1ff 100644 --- a/src/include/distributed/enterprise.h +++ b/src/include/distributed/enterprise.h @@ -13,6 +13,7 @@ #define CITUS_ENTERPRISE_H #include "postgres.h" + #include "fmgr.h" diff --git a/src/include/distributed/errormessage.h b/src/include/distributed/errormessage.h index 3c19a9c83..7a38d513c 100644 --- a/src/include/distributed/errormessage.h +++ b/src/include/distributed/errormessage.h @@ -11,9 +11,11 @@ #define ERRORMESSAGE_H #include "c.h" -#include "distributed/citus_nodes.h" + #include "pg_version_compat.h" +#include "distributed/citus_nodes.h" + typedef struct DeferredErrorMessage { diff --git a/src/include/distributed/executor_util.h b/src/include/distributed/executor_util.h index 8560c6dfd..b39122d26 100644 --- a/src/include/distributed/executor_util.h +++ b/src/include/distributed/executor_util.h @@ -12,10 +12,11 @@ #include "funcapi.h" #include "access/tupdesc.h" -#include "distributed/multi_physical_planner.h" #include "nodes/params.h" #include "nodes/pg_list.h" +#include "distributed/multi_physical_planner.h" + /* utility functions for dealing with tasks in the executor */ extern bool TaskListModifiesDatabase(RowModifyLevel modLevel, List *taskList); diff --git a/src/include/distributed/foreign_key_relationship.h b/src/include/distributed/foreign_key_relationship.h index fbbee831e..bbaf8be73 100644 --- a/src/include/distributed/foreign_key_relationship.h +++ b/src/include/distributed/foreign_key_relationship.h @@ -10,10 +10,12 @@ #define FOREIGN_KEY_RELATIONSHIP_H #include "postgres.h" + #include "postgres_ext.h" -#include "utils/relcache.h" -#include "utils/hsearch.h" + #include "nodes/primnodes.h" +#include "utils/hsearch.h" +#include "utils/relcache.h" extern List * GetForeignKeyConnectedRelationIdList(Oid relationId); extern bool ShouldUndistributeCitusLocalTable(Oid relationId); diff --git a/src/include/distributed/hash_helpers.h b/src/include/distributed/hash_helpers.h index 168879b4d..b64bfde71 100644 --- a/src/include/distributed/hash_helpers.h +++ b/src/include/distributed/hash_helpers.h @@ -11,10 +11,10 @@ #include "postgres.h" -#include "pg_version_constants.h" - #include "utils/hsearch.h" +#include "pg_version_constants.h" + /* * assert_valid_hash_key2 checks if a type that contains 2 fields contains no * padding bytes. This is necessary to use a type as a hash key with tag_hash. diff --git a/src/include/distributed/insert_select_planner.h b/src/include/distributed/insert_select_planner.h index 771d1d60f..a9100b02d 100644 --- a/src/include/distributed/insert_select_planner.h +++ b/src/include/distributed/insert_select_planner.h @@ -16,12 +16,13 @@ #include "postgres.h" -#include "distributed/multi_physical_planner.h" -#include "distributed/distributed_planner.h" #include "nodes/execnodes.h" #include "nodes/parsenodes.h" #include "nodes/plannodes.h" +#include "distributed/distributed_planner.h" +#include "distributed/multi_physical_planner.h" + extern bool InsertSelectIntoCitusTable(Query *query); extern bool CheckInsertSelectQuery(Query *query); diff --git a/src/include/distributed/intermediate_results.h b/src/include/distributed/intermediate_results.h index 63eca5ad1..ca4fa581e 100644 --- a/src/include/distributed/intermediate_results.h +++ b/src/include/distributed/intermediate_results.h @@ -14,13 +14,14 @@ #include "fmgr.h" -#include "distributed/commands/multi_copy.h" #include "nodes/execnodes.h" #include "nodes/pg_list.h" #include "tcop/dest.h" #include "utils/builtins.h" #include "utils/palloc.h" +#include "distributed/commands/multi_copy.h" + /* * DistributedResultFragment represents a fragment of a distributed result. diff --git a/src/include/distributed/listutils.h b/src/include/distributed/listutils.h index 833c77d22..2a52cbc75 100644 --- a/src/include/distributed/listutils.h +++ b/src/include/distributed/listutils.h @@ -13,13 +13,15 @@ #define CITUS_LISTUTILS_H #include "postgres.h" + #include "c.h" #include "nodes/pg_list.h" -#include "pg_version_compat.h" #include "utils/array.h" #include "utils/hsearch.h" +#include "pg_version_compat.h" + /* * ListCellAndListWrapper stores a list and list cell. diff --git a/src/include/distributed/local_distributed_join_planner.h b/src/include/distributed/local_distributed_join_planner.h index dfb45f149..3390ab213 100644 --- a/src/include/distributed/local_distributed_join_planner.h +++ b/src/include/distributed/local_distributed_join_planner.h @@ -14,6 +14,7 @@ #define LOCAL_DISTRIBUTED_JOIN_PLANNER_H #include "postgres.h" + #include "distributed/recursive_planning.h" /* managed via guc.c */ diff --git a/src/include/distributed/lock_graph.h b/src/include/distributed/lock_graph.h index f204ebb03..e14a51580 100644 --- a/src/include/distributed/lock_graph.h +++ b/src/include/distributed/lock_graph.h @@ -14,12 +14,14 @@ #include "postgres.h" + #include "libpq-fe.h" #include "datatype/timestamp.h" -#include "distributed/backend_data.h" #include "storage/lock.h" +#include "distributed/backend_data.h" + /* * Describes an edge in a waiting-for graph of locks. This isn't used for diff --git a/src/include/distributed/merge_planner.h b/src/include/distributed/merge_planner.h index 898292603..b6636687a 100644 --- a/src/include/distributed/merge_planner.h +++ b/src/include/distributed/merge_planner.h @@ -15,6 +15,7 @@ #include "c.h" #include "nodes/parsenodes.h" + #include "distributed/distributed_planner.h" #include "distributed/errormessage.h" #include "distributed/multi_physical_planner.h" diff --git a/src/include/distributed/metadata/dependency.h b/src/include/distributed/metadata/dependency.h index 2d3759e1f..2cfefc87e 100644 --- a/src/include/distributed/metadata/dependency.h +++ b/src/include/distributed/metadata/dependency.h @@ -16,9 +16,10 @@ #include "catalog/objectaddress.h" #include "catalog/pg_depend.h" -#include "distributed/errormessage.h" #include "nodes/pg_list.h" +#include "distributed/errormessage.h" + typedef bool (*AddressPredicate)(const ObjectAddress *); extern List * GetUniqueDependenciesList(List *objectAddressesList); diff --git a/src/include/distributed/metadata_cache.h b/src/include/distributed/metadata_cache.h index 34b95b859..f1120497b 100644 --- a/src/include/distributed/metadata_cache.h +++ b/src/include/distributed/metadata_cache.h @@ -14,10 +14,12 @@ #include "postgres.h" #include "fmgr.h" + +#include "utils/hsearch.h" + #include "distributed/metadata_utility.h" #include "distributed/pg_dist_partition.h" #include "distributed/worker_manager.h" -#include "utils/hsearch.h" extern bool EnableVersionChecks; diff --git a/src/include/distributed/metadata_sync.h b/src/include/distributed/metadata_sync.h index 7b993ec31..e20c44535 100644 --- a/src/include/distributed/metadata_sync.h +++ b/src/include/distributed/metadata_sync.h @@ -13,10 +13,11 @@ #define METADATA_SYNC_H +#include "nodes/pg_list.h" + #include "distributed/commands/utility_hook.h" #include "distributed/coordinator_protocol.h" #include "distributed/metadata_cache.h" -#include "nodes/pg_list.h" /* managed via guc.c */ typedef enum diff --git a/src/include/distributed/metadata_utility.h b/src/include/distributed/metadata_utility.h index 7e50a6af6..04a4b500b 100644 --- a/src/include/distributed/metadata_utility.h +++ b/src/include/distributed/metadata_utility.h @@ -21,13 +21,14 @@ #include "access/tupdesc.h" #include "catalog/indexing.h" #include "catalog/objectaddress.h" +#include "utils/acl.h" +#include "utils/relcache.h" + #include "distributed/citus_nodes.h" #include "distributed/connection_management.h" #include "distributed/errormessage.h" #include "distributed/relay_utility.h" #include "distributed/worker_manager.h" -#include "utils/acl.h" -#include "utils/relcache.h" /* total number of hash tokens (2^32) */ diff --git a/src/include/distributed/multi_executor.h b/src/include/distributed/multi_executor.h index 5ae010d87..6708d9a64 100644 --- a/src/include/distributed/multi_executor.h +++ b/src/include/distributed/multi_executor.h @@ -11,8 +11,8 @@ #define MULTI_EXECUTOR_H #include "executor/execdesc.h" -#include "nodes/parsenodes.h" #include "nodes/execnodes.h" +#include "nodes/parsenodes.h" #include "distributed/citus_custom_scan.h" #include "distributed/multi_physical_planner.h" diff --git a/src/include/distributed/multi_explain.h b/src/include/distributed/multi_explain.h index 296634905..f6dad83c2 100644 --- a/src/include/distributed/multi_explain.h +++ b/src/include/distributed/multi_explain.h @@ -10,9 +10,10 @@ #ifndef MULTI_EXPLAIN_H #define MULTI_EXPLAIN_H -#include "executor/executor.h" #include "tuple_destination.h" +#include "executor/executor.h" + typedef enum { EXPLAIN_ANALYZE_SORT_BY_TIME = 0, diff --git a/src/include/distributed/multi_logical_planner.h b/src/include/distributed/multi_logical_planner.h index de4901ea2..f68fd3ed5 100644 --- a/src/include/distributed/multi_logical_planner.h +++ b/src/include/distributed/multi_logical_planner.h @@ -14,15 +14,16 @@ #ifndef MULTI_LOGICAL_PLANNER_H #define MULTI_LOGICAL_PLANNER_H +#include "nodes/nodes.h" +#include "nodes/parsenodes.h" +#include "nodes/pg_list.h" +#include "nodes/primnodes.h" + #include "distributed/citus_nodes.h" #include "distributed/errormessage.h" #include "distributed/log_utils.h" #include "distributed/multi_join_order.h" #include "distributed/relation_restriction_equivalence.h" -#include "nodes/nodes.h" -#include "nodes/primnodes.h" -#include "nodes/parsenodes.h" -#include "nodes/pg_list.h" #define SUBQUERY_RANGE_TABLE_ID -1 diff --git a/src/include/distributed/multi_logical_replication.h b/src/include/distributed/multi_logical_replication.h index f5a9dc342..2a57c0224 100644 --- a/src/include/distributed/multi_logical_replication.h +++ b/src/include/distributed/multi_logical_replication.h @@ -15,6 +15,7 @@ #include "c.h" #include "nodes/pg_list.h" + #include "distributed/connection_management.h" #include "distributed/hash_helpers.h" #include "distributed/shard_cleaner.h" diff --git a/src/include/distributed/multi_partitioning_utils.h b/src/include/distributed/multi_partitioning_utils.h index b8cfe38c0..7d76b9aa3 100644 --- a/src/include/distributed/multi_partitioning_utils.h +++ b/src/include/distributed/multi_partitioning_utils.h @@ -8,9 +8,10 @@ #define MULTI_PARTITIONING_UTILS_H_ -#include "distributed/metadata_utility.h" #include "nodes/pg_list.h" +#include "distributed/metadata_utility.h" + extern bool PartitionedTable(Oid relationId); extern bool PartitionedTableNoLock(Oid relationId); diff --git a/src/include/distributed/multi_physical_planner.h b/src/include/distributed/multi_physical_planner.h index 6bdc95cb3..60c5c9783 100644 --- a/src/include/distributed/multi_physical_planner.h +++ b/src/include/distributed/multi_physical_planner.h @@ -16,22 +16,23 @@ #include "postgres.h" -#include "pg_version_constants.h" - #include "c.h" #include "datatype/timestamp.h" -#include "distributed/citus_nodes.h" -#include "distributed/errormessage.h" -#include "distributed/log_utils.h" -#include "distributed/metadata_utility.h" -#include "distributed/worker_manager.h" -#include "distributed/multi_logical_planner.h" -#include "distributed/distributed_planner.h" #include "lib/stringinfo.h" #include "nodes/parsenodes.h" #include "utils/array.h" +#include "pg_version_constants.h" + +#include "distributed/citus_nodes.h" +#include "distributed/distributed_planner.h" +#include "distributed/errormessage.h" +#include "distributed/log_utils.h" +#include "distributed/metadata_utility.h" +#include "distributed/multi_logical_planner.h" +#include "distributed/worker_manager.h" + /* Definitions local to the physical planner */ #define NON_PRUNABLE_JOIN -1 diff --git a/src/include/distributed/multi_progress.h b/src/include/distributed/multi_progress.h index 64bad527f..2a9cf1cbb 100644 --- a/src/include/distributed/multi_progress.h +++ b/src/include/distributed/multi_progress.h @@ -16,6 +16,7 @@ #include "postgres.h" #include "fmgr.h" + #include "nodes/pg_list.h" #include "storage/dsm.h" diff --git a/src/include/distributed/multi_router_planner.h b/src/include/distributed/multi_router_planner.h index 160cf6605..ae75ee631 100644 --- a/src/include/distributed/multi_router_planner.h +++ b/src/include/distributed/multi_router_planner.h @@ -14,12 +14,13 @@ #include "c.h" +#include "nodes/parsenodes.h" + +#include "distributed/distributed_planner.h" #include "distributed/errormessage.h" #include "distributed/log_utils.h" #include "distributed/multi_logical_planner.h" #include "distributed/multi_physical_planner.h" -#include "distributed/distributed_planner.h" -#include "nodes/parsenodes.h" /* reserved alias name for UPSERTs */ diff --git a/src/include/distributed/placement_access.h b/src/include/distributed/placement_access.h index 28b05baae..0eafa678a 100644 --- a/src/include/distributed/placement_access.h +++ b/src/include/distributed/placement_access.h @@ -11,7 +11,9 @@ #define PLACEMENT_ACCESS_H #include "postgres.h" + #include "nodes/pg_list.h" + #include "distributed/multi_physical_planner.h" /* forward declare, to avoid dependency on ShardPlacement definition */ diff --git a/src/include/distributed/query_colocation_checker.h b/src/include/distributed/query_colocation_checker.h index 562869a92..2a46d364c 100644 --- a/src/include/distributed/query_colocation_checker.h +++ b/src/include/distributed/query_colocation_checker.h @@ -11,10 +11,11 @@ #define QUERY_COLOCATION_CHECKER_H -#include "distributed/distributed_planner.h" #include "nodes/parsenodes.h" #include "nodes/primnodes.h" +#include "distributed/distributed_planner.h" + /* * ColocatedJoinChecker is a helper structure that is used to decide diff --git a/src/include/distributed/query_pushdown_planning.h b/src/include/distributed/query_pushdown_planning.h index 061a4a730..e0d4f25dd 100644 --- a/src/include/distributed/query_pushdown_planning.h +++ b/src/include/distributed/query_pushdown_planning.h @@ -13,10 +13,10 @@ #include "postgres.h" #include "distributed/distributed_planner.h" -#include "distributed/multi_logical_planner.h" -#include "distributed/multi_physical_planner.h" #include "distributed/errormessage.h" #include "distributed/log_utils.h" +#include "distributed/multi_logical_planner.h" +#include "distributed/multi_physical_planner.h" /* Config variables managed via guc.c */ diff --git a/src/include/distributed/query_utils.h b/src/include/distributed/query_utils.h index 7e1ba54e6..0b216d158 100644 --- a/src/include/distributed/query_utils.h +++ b/src/include/distributed/query_utils.h @@ -12,6 +12,7 @@ #define QUERY_UTILS_H #include "postgres.h" + #include "nodes/pg_list.h" #include "nodes/primnodes.h" diff --git a/src/include/distributed/recursive_planning.h b/src/include/distributed/recursive_planning.h index 87df7fba2..c37eba343 100644 --- a/src/include/distributed/recursive_planning.h +++ b/src/include/distributed/recursive_planning.h @@ -10,13 +10,15 @@ #ifndef RECURSIVE_PLANNING_H #define RECURSIVE_PLANNING_H +#include "nodes/pathnodes.h" +#include "nodes/pg_list.h" +#include "nodes/primnodes.h" + #include "pg_version_constants.h" + #include "distributed/errormessage.h" #include "distributed/log_utils.h" #include "distributed/relation_restriction_equivalence.h" -#include "nodes/pg_list.h" -#include "nodes/primnodes.h" -#include "nodes/pathnodes.h" typedef struct RecursivePlanningContextInternal RecursivePlanningContext; diff --git a/src/include/distributed/relay_utility.h b/src/include/distributed/relay_utility.h index f5a37da45..6fa2172e3 100644 --- a/src/include/distributed/relay_utility.h +++ b/src/include/distributed/relay_utility.h @@ -16,6 +16,7 @@ #define RELAY_UTILITY_H #include "fmgr.h" + #include "lib/stringinfo.h" #include "nodes/nodes.h" diff --git a/src/include/distributed/remote_transaction.h b/src/include/distributed/remote_transaction.h index 6136f25c9..1c422da20 100644 --- a/src/include/distributed/remote_transaction.h +++ b/src/include/distributed/remote_transaction.h @@ -12,8 +12,9 @@ #include "libpq-fe.h" -#include "nodes/pg_list.h" + #include "lib/ilist.h" +#include "nodes/pg_list.h" /* forward declare, to avoid recursive includes */ diff --git a/src/include/distributed/replication_origin_session_utils.h b/src/include/distributed/replication_origin_session_utils.h index e90bd8ab8..b11d56ffc 100644 --- a/src/include/distributed/replication_origin_session_utils.h +++ b/src/include/distributed/replication_origin_session_utils.h @@ -12,7 +12,9 @@ #define REPLICATION_ORIGIN_SESSION_UTILS_H #include "postgres.h" + #include "replication/origin.h" + #include "distributed/connection_management.h" extern void InitializeReplicationOriginSessionUtils(void); diff --git a/src/include/distributed/resource_lock.h b/src/include/distributed/resource_lock.h index 9efa1b767..8e0e36735 100644 --- a/src/include/distributed/resource_lock.h +++ b/src/include/distributed/resource_lock.h @@ -11,13 +11,15 @@ #define RESOURCE_LOCK_H #include "postgres.h" /* IWYU pragma: keep */ + #include "c.h" -#include "distributed/worker_transaction.h" #include "nodes/pg_list.h" #include "storage/lock.h" #include "tcop/utility.h" +#include "distributed/worker_transaction.h" + /* * Postgres' advisory locks use 'field4' to discern between different kind of diff --git a/src/include/distributed/shard_pruning.h b/src/include/distributed/shard_pruning.h index 04176314e..1b1ffce8a 100644 --- a/src/include/distributed/shard_pruning.h +++ b/src/include/distributed/shard_pruning.h @@ -11,9 +11,10 @@ #ifndef SHARD_PRUNING_H_ #define SHARD_PRUNING_H_ -#include "distributed/metadata_cache.h" #include "nodes/primnodes.h" +#include "distributed/metadata_cache.h" + #define INVALID_SHARD_INDEX -1 /* Function declarations for shard pruning */ diff --git a/src/include/distributed/shard_rebalancer.h b/src/include/distributed/shard_rebalancer.h index 345748ced..79414eb3c 100644 --- a/src/include/distributed/shard_rebalancer.h +++ b/src/include/distributed/shard_rebalancer.h @@ -17,7 +17,9 @@ #include "postgres.h" #include "fmgr.h" + #include "nodes/pg_list.h" + #include "distributed/coordinator_protocol.h" #include "distributed/worker_manager.h" diff --git a/src/include/distributed/shard_transfer.h b/src/include/distributed/shard_transfer.h index a6d024a2e..c1621879b 100644 --- a/src/include/distributed/shard_transfer.h +++ b/src/include/distributed/shard_transfer.h @@ -9,9 +9,10 @@ #include "postgres.h" -#include "distributed/shard_rebalancer.h" #include "nodes/pg_list.h" +#include "distributed/shard_rebalancer.h" + extern Datum citus_move_shard_placement(PG_FUNCTION_ARGS); extern Datum citus_move_shard_placement_with_nodeid(PG_FUNCTION_ARGS); diff --git a/src/include/distributed/shardinterval_utils.h b/src/include/distributed/shardinterval_utils.h index 4cc99e6d5..ed5600a11 100644 --- a/src/include/distributed/shardinterval_utils.h +++ b/src/include/distributed/shardinterval_utils.h @@ -12,10 +12,11 @@ #ifndef SHARDINTERVAL_UTILS_H_ #define SHARDINTERVAL_UTILS_H_ -#include "distributed/metadata_utility.h" -#include "distributed/metadata_cache.h" #include "nodes/primnodes.h" +#include "distributed/metadata_cache.h" +#include "distributed/metadata_utility.h" + #define INVALID_SHARD_INDEX -1 /* OperatorCacheEntry contains information for each element in OperatorCache */ diff --git a/src/include/distributed/transaction_management.h b/src/include/distributed/transaction_management.h index ca4e632a9..fa762682b 100644 --- a/src/include/distributed/transaction_management.h +++ b/src/include/distributed/transaction_management.h @@ -14,7 +14,6 @@ #include "lib/ilist.h" #include "lib/stringinfo.h" #include "nodes/pg_list.h" -#include "lib/stringinfo.h" #include "nodes/primnodes.h" #include "utils/hsearch.h" diff --git a/src/include/distributed/tuple_destination.h b/src/include/distributed/tuple_destination.h index 0480ffdc4..5b4f64983 100644 --- a/src/include/distributed/tuple_destination.h +++ b/src/include/distributed/tuple_destination.h @@ -11,10 +11,11 @@ #define TUPLE_DESTINATION_H #include "access/tupdesc.h" -#include "distributed/multi_physical_planner.h" #include "tcop/dest.h" #include "utils/tuplestore.h" +#include "distributed/multi_physical_planner.h" + typedef struct TupleDestination TupleDestination; diff --git a/src/include/distributed/utils/citus_stat_tenants.h b/src/include/distributed/utils/citus_stat_tenants.h index 0a482b241..573502606 100644 --- a/src/include/distributed/utils/citus_stat_tenants.h +++ b/src/include/distributed/utils/citus_stat_tenants.h @@ -11,13 +11,14 @@ #ifndef CITUS_ATTRIBUTE_H #define CITUS_ATTRIBUTE_H -#include "distributed/hash_helpers.h" #include "executor/execdesc.h" #include "executor/executor.h" #include "storage/lwlock.h" #include "utils/datetime.h" #include "utils/hsearch.h" +#include "distributed/hash_helpers.h" + #define MAX_TENANT_ATTRIBUTE_LENGTH 100 /* diff --git a/src/include/distributed/utils/directory.h b/src/include/distributed/utils/directory.h index 7ed8a3f95..76b6cf1df 100644 --- a/src/include/distributed/utils/directory.h +++ b/src/include/distributed/utils/directory.h @@ -12,6 +12,7 @@ #define CITUS_DIRECTORY_H #include "postgres.h" + #include "lib/stringinfo.h" diff --git a/src/include/distributed/utils/function.h b/src/include/distributed/utils/function.h index 91d4ab84b..6f527218c 100644 --- a/src/include/distributed/utils/function.h +++ b/src/include/distributed/utils/function.h @@ -12,6 +12,7 @@ #define CITUS_FUNCTION_H #include "postgres.h" + #include "fmgr.h" diff --git a/src/include/distributed/version_compat.h b/src/include/distributed/version_compat.h index b990b82ef..f450dc1ce 100644 --- a/src/include/distributed/version_compat.h +++ b/src/include/distributed/version_compat.h @@ -13,21 +13,21 @@ #include "postgres.h" -#include "access/sdir.h" #include "access/heapam.h" -#include "commands/explain.h" +#include "access/sdir.h" #include "catalog/namespace.h" -#include "distributed/citus_ruleutils.h" -#include "distributed/citus_safe_lib.h" +#include "commands/explain.h" #include "executor/tuptable.h" #include "nodes/parsenodes.h" -#include "parser/parse_func.h" #include "optimizer/optimizer.h" - +#include "parser/parse_func.h" #include "tcop/tcopprot.h" #include "pg_version_compat.h" +#include "distributed/citus_ruleutils.h" +#include "distributed/citus_safe_lib.h" + typedef struct { File fd; diff --git a/src/include/distributed/worker_manager.h b/src/include/distributed/worker_manager.h index 694d38ccf..02a43fe0b 100644 --- a/src/include/distributed/worker_manager.h +++ b/src/include/distributed/worker_manager.h @@ -16,9 +16,9 @@ #include "postgres.h" +#include "nodes/pg_list.h" #include "storage/lmgr.h" #include "storage/lockdefs.h" -#include "nodes/pg_list.h" /* Worker nodeName's, nodePort's, and nodeCluster's maximum length */ diff --git a/src/include/distributed/worker_protocol.h b/src/include/distributed/worker_protocol.h index 29d364247..21c0c44c8 100644 --- a/src/include/distributed/worker_protocol.h +++ b/src/include/distributed/worker_protocol.h @@ -17,11 +17,13 @@ #include "postgres.h" #include "fmgr.h" -#include "distributed/shardinterval_utils.h" + #include "lib/stringinfo.h" #include "nodes/parsenodes.h" #include "storage/fd.h" #include "utils/array.h" + +#include "distributed/shardinterval_utils.h" #include "distributed/version_compat.h" diff --git a/src/include/distributed/worker_transaction.h b/src/include/distributed/worker_transaction.h index d622fe366..b9a855828 100644 --- a/src/include/distributed/worker_transaction.h +++ b/src/include/distributed/worker_transaction.h @@ -12,9 +12,10 @@ #ifndef WORKER_TRANSACTION_H #define WORKER_TRANSACTION_H +#include "storage/lockdefs.h" + #include "distributed/connection_management.h" #include "distributed/worker_manager.h" -#include "storage/lockdefs.h" /* From c019acc01b41f7da6065edebc63b45aca21a19b0 Mon Sep 17 00:00:00 2001 From: Naisila Puka <37271756+naisila@users.noreply.github.com> Date: Fri, 24 Nov 2023 14:40:23 +0300 Subject: [PATCH 3/5] Run wal2json cdc test for pg16 as well (#7361) pg16 wal2json package is now available, adding the tests back. Basically reverting https://github.com/citusdata/citus/pull/6952/commits/f253bb32104b54cf96dd8fd05821500af1aba206 Sister PR https://github.com/citusdata/the-process/pull/153 --- .github/workflows/build_and_test.yml | 2 +- src/test/cdc/t/016_cdc_wal2json.pl | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index ba3c4f8e3..f820fae4c 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -31,7 +31,7 @@ jobs: pgupgrade_image_name: "citus/pgupgradetester" style_checker_image_name: "citus/stylechecker" style_checker_tools_version: "0.8.18" - image_suffix: "-vbd8441d" + image_suffix: "-v19b671f" pg14_version: '{ "major": "14", "full": "14.10" }' pg15_version: '{ "major": "15", "full": "15.5" }' pg16_version: '{ "major": "16", "full": "16.1" }' diff --git a/src/test/cdc/t/016_cdc_wal2json.pl b/src/test/cdc/t/016_cdc_wal2json.pl index 10475ba85..ab384df64 100644 --- a/src/test/cdc/t/016_cdc_wal2json.pl +++ b/src/test/cdc/t/016_cdc_wal2json.pl @@ -9,13 +9,6 @@ use cdctestlib; use threads; -my $pg_major_version = int($ENV{'pg_major_version'}); -print("working with PG major version : $pg_major_version\n"); -if ($pg_major_version >= 16) { - plan skip_all => 'wal2json is not available for PG16 yet'; - exit 0; -} - # Initialize co-ordinator node my $select_stmt = qq(SELECT * FROM data_100008 ORDER BY id;); my $result = 0; From 47bd9d8917c40be9351d3ea7407070cdef188221 Mon Sep 17 00:00:00 2001 From: Nils Dijk Date: Fri, 24 Nov 2023 14:03:01 +0100 Subject: [PATCH 4/5] Devcontainer: add code formatting tools (#7355) The devcontainer missed two tools used by code formatting, as done by `ci/fix_style.sh` The missing tools were both python tools, used for formatting our python scripts. - black - isort This change adds both tools. The way it does this is by keeping a `requirements.txt` in `.devcontainer/` containing all python dependencies we need to install. When installing both tools in a clean environment we have exported all installed packages with `pip freeze` into the `requirements.txt` assuming this is all related to the two tools installed. Since python installs the binaires in `~/.local/bin/` we also move some scripts we manually install from `~/.bin/` to that same directory. At first it seemed like vscode's devcontainers were not having that on the path. However, when the container has that directory when it starts the directory does get added to `$PATH` by `~/.profile`. This makes the whole environment a bit more streamlined. --- .devcontainer/Dockerfile | 12 ++++++------ .devcontainer/requirements.txt | 9 +++++++++ .github/workflows/devcontainer.yml | 6 +++--- 3 files changed, 18 insertions(+), 9 deletions(-) create mode 100644 .devcontainer/requirements.txt diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index c2cab0272..11fb010b7 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -165,10 +165,8 @@ RUN sudo apt update \ RUN sudo curl -o /root/gdbpg.py https://raw.githubusercontent.com/tvesely/gdbpg/6065eee7872457785f830925eac665aa535caf62/gdbpg.py COPY --chown=root:root .gdbinit /root/ -# add some common tools to the final container -# bin directory for user tools -RUN mkdir .bin -ENV PATH="/home/citus/.bin:${PATH}" +# install developer dependencies in the global environment +RUN --mount=type=bind,source=requirements.txt,target=requirements.txt pip install -r requirements.txt # for persistent bash history across devcontainers we need to have # a) a directory to store the history in @@ -181,14 +179,16 @@ RUN sudo install -d -o citus -g citus /commandhistory \ # install citus-dev RUN git clone --branch develop https://github.com/citusdata/tools.git citus-tools \ && ( cd citus-tools/citus_dev && pipenv install ) \ - && ln -s /home/citus/citus-tools/citus_dev/citus_dev-pipenv .bin/citus_dev \ + && mkdir -p ~/.local/bin \ + && ln -s /home/citus/citus-tools/citus_dev/citus_dev-pipenv .local/bin/citus_dev \ && sudo make -C citus-tools/uncrustify install bindir=/usr/local/bin pkgsysconfdir=/usr/local/etc/ \ && mkdir -p ~/.local/share/bash-completion/completions/ \ && ln -s ~/citus-tools/citus_dev/bash_completion ~/.local/share/bash-completion/completions/citus_dev # TODO some LC_ALL errors, possibly solved by locale-gen RUN git clone https://github.com/so-fancy/diff-so-fancy.git \ - && ln -s /home/citus/diff-so-fancy/diff-so-fancy .bin/ + && mkdir -p ~/.local/bin \ + && ln -s /home/citus/diff-so-fancy/diff-so-fancy .local/bin/ COPY --link --from=uncrustify-builder /uncrustify/usr/ /usr/ diff --git a/.devcontainer/requirements.txt b/.devcontainer/requirements.txt new file mode 100644 index 000000000..7300b3b89 --- /dev/null +++ b/.devcontainer/requirements.txt @@ -0,0 +1,9 @@ +black==23.11.0 +click==8.1.7 +isort==5.12.0 +mypy-extensions==1.0.0 +packaging==23.2 +pathspec==0.11.2 +platformdirs==4.0.0 +tomli==2.0.1 +typing_extensions==4.8.0 diff --git a/.github/workflows/devcontainer.yml b/.github/workflows/devcontainer.yml index c62fe11df..dd5d506e4 100644 --- a/.github/workflows/devcontainer.yml +++ b/.github/workflows/devcontainer.yml @@ -20,7 +20,7 @@ jobs: - name: Docker meta id: meta - uses: docker/metadata-action@v4 + uses: docker/metadata-action@v5 with: images: | ghcr.io/citusdata/citus-devcontainer @@ -32,14 +32,14 @@ jobs: uses: docker/setup-buildx-action@v2 - name: 'Login to GitHub Container Registry' - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: registry: ghcr.io username: ${{github.actor}} password: ${{secrets.GITHUB_TOKEN}} - name: Build and push - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: "{{defaultContext}}:.devcontainer" push: true From dbdde111c1dbbb26743e5084f63a94561175fa74 Mon Sep 17 00:00:00 2001 From: Naisila Puka <37271756+naisila@users.noreply.github.com> Date: Fri, 24 Nov 2023 18:26:06 +0300 Subject: [PATCH 5/5] Add missing order by clause in failure_split_cleanup test (#7363) https://github.com/citusdata/citus/actions/runs/6903353045/attempts/1#summary-18781959638 ```diff ARRAY['-100000'], ARRAY[:worker_1_node, :worker_2_node], 'force_logical'); ERROR: server closed the connection unexpectedly CONTEXT: while executing command on localhost:9060 SELECT operation_id, object_type, object_name, node_group_id, policy_type FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name; operation_id | object_type | object_name | node_group_id | policy_type --------------+-------------+-----------------------------------------------------------+---------------+------------- 777 | 1 | citus_failure_split_cleanup_schema.table_to_split_8981000 | 1 | 0 - 777 | 1 | citus_failure_split_cleanup_schema.table_to_split_8981002 | 1 | 1 777 | 1 | citus_failure_split_cleanup_schema.table_to_split_8981002 | 2 | 0 + 777 | 1 | citus_failure_split_cleanup_schema.table_to_split_8981002 | 1 | 1 777 | 1 | citus_failure_split_cleanup_schema.table_to_split_8981003 | 2 | 1 777 | 4 | citus_shard_split_publication_1_10_777 | 2 | 0 (5 rows) ``` Similar attempt to fix in https://github.com/citusdata/citus/commit/c9f2fc892d4ce01a4bc23beb508e2ff03f08a774 There were some more missing ORDER BY stuff, so I added them --- src/test/regress/expected/failure_split_cleanup.out | 8 ++++---- src/test/regress/sql/failure_split_cleanup.sql | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/test/regress/expected/failure_split_cleanup.out b/src/test/regress/expected/failure_split_cleanup.out index d81335325..f9eacd47c 100644 --- a/src/test/regress/expected/failure_split_cleanup.out +++ b/src/test/regress/expected/failure_split_cleanup.out @@ -54,7 +54,7 @@ SELECT create_distributed_table('table_to_split', 'id'); ERROR: connection not open CONTEXT: while executing command on localhost:xxxxx SELECT operation_id, object_type, object_name, node_group_id, policy_type - FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name; + FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name, node_group_id; operation_id | object_type | object_name | node_group_id | policy_type --------------------------------------------------------------------- 777 | 1 | citus_failure_split_cleanup_schema.table_to_split_8981000 | 1 | 0 @@ -109,7 +109,7 @@ CONTEXT: while executing command on localhost:xxxxx (1 row) SELECT operation_id, object_type, object_name, node_group_id, policy_type - FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name; + FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name, node_group_id; operation_id | object_type | object_name | node_group_id | policy_type --------------------------------------------------------------------- (0 rows) @@ -163,7 +163,7 @@ CONTEXT: while executing command on localhost:xxxxx ERROR: Failed to run worker_split_shard_replication_setup UDF. It should successfully execute for splitting a shard in a non-blocking way. Please retry. RESET client_min_messages; SELECT operation_id, object_type, object_name, node_group_id, policy_type - FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name; + FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name, node_group_id; operation_id | object_type | object_name | node_group_id | policy_type --------------------------------------------------------------------- 777 | 1 | citus_failure_split_cleanup_schema.table_to_split_8981000 | 1 | 0 @@ -221,7 +221,7 @@ ERROR: Failed to run worker_split_shard_replication_setup UDF. It should succes (1 row) SELECT operation_id, object_type, object_name, node_group_id, policy_type - FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name; + FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name, node_group_id; operation_id | object_type | object_name | node_group_id | policy_type --------------------------------------------------------------------- (0 rows) diff --git a/src/test/regress/sql/failure_split_cleanup.sql b/src/test/regress/sql/failure_split_cleanup.sql index 9dfbb245e..cefeeb05d 100644 --- a/src/test/regress/sql/failure_split_cleanup.sql +++ b/src/test/regress/sql/failure_split_cleanup.sql @@ -38,7 +38,7 @@ SELECT create_distributed_table('table_to_split', 'id'); ARRAY[:worker_1_node, :worker_2_node], 'force_logical'); SELECT operation_id, object_type, object_name, node_group_id, policy_type - FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name; + FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name, node_group_id; -- we need to allow connection so that we can connect to proxy SELECT citus.mitmproxy('conn.allow()'); @@ -58,7 +58,7 @@ SELECT create_distributed_table('table_to_split', 'id'); \c - postgres - :master_port SELECT public.wait_for_resource_cleanup(); SELECT operation_id, object_type, object_name, node_group_id, policy_type - FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name; + FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name, node_group_id; \c - - - :worker_2_proxy_port SET search_path TO "citus_failure_split_cleanup_schema", public, pg_catalog; @@ -90,7 +90,7 @@ SELECT create_distributed_table('table_to_split', 'id'); RESET client_min_messages; SELECT operation_id, object_type, object_name, node_group_id, policy_type - FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name; + FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name, node_group_id; -- we need to allow connection so that we can connect to proxy SELECT citus.mitmproxy('conn.allow()'); @@ -109,7 +109,7 @@ SELECT create_distributed_table('table_to_split', 'id'); \c - postgres - :master_port SELECT public.wait_for_resource_cleanup(); SELECT operation_id, object_type, object_name, node_group_id, policy_type - FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name; + FROM pg_dist_cleanup where operation_id = 777 ORDER BY object_name, node_group_id; \c - - - :worker_2_proxy_port SET search_path TO "citus_failure_split_cleanup_schema", public, pg_catalog;