From 9327df8446e42354577993d8707c45aa0cc9e585 Mon Sep 17 00:00:00 2001 From: Mehmet YILMAZ Date: Wed, 23 Jul 2025 15:15:55 +0300 Subject: [PATCH] Add PG 18Beta2 Build compatibility (#8060) Fixes #8061 Add PG 18Beta2 Build compatibility Revert "Don't lock partitions pruned by initial pruning Relevant PG commit: 1722d5eb05d8e5d2e064cd1798abcae4f296ca9d https://github.com/postgres/postgres/commit/1722d5e --- .../distributed/executor/local_executor.c | 20 ------ .../distributed/executor/multi_executor.c | 16 ----- .../partitioned_intermediate_results.c | 16 ----- .../distributed/planner/multi_explain.c | 66 +------------------ src/backend/distributed/shared_library_init.c | 60 ++++++----------- .../distributed/utils/background_jobs.c | 15 ----- 6 files changed, 22 insertions(+), 171 deletions(-) diff --git a/src/backend/distributed/executor/local_executor.c b/src/backend/distributed/executor/local_executor.c index 07bd89116..0730e792a 100644 --- a/src/backend/distributed/executor/local_executor.c +++ b/src/backend/distributed/executor/local_executor.c @@ -764,24 +764,6 @@ ExecuteTaskPlan(PlannedStmt *taskPlan, char *queryString, localPlacementIndex) : CreateDestReceiver(DestNone); - /* Create a QueryDesc for the query */ - #if PG_VERSION_NUM >= PG_VERSION_18 - - /* PG18+: nine‐arg CreateQueryDesc with a CachedPlan slot */ - QueryDesc *queryDesc = CreateQueryDesc( - taskPlan, /* PlannedStmt *plannedstmt */ - NULL, /* CachedPlan *cplan (none) */ - queryString, /* const char *sourceText */ - GetActiveSnapshot(), /* Snapshot snapshot */ - InvalidSnapshot, /* Snapshot crosscheck_snapshot */ - destReceiver, /* DestReceiver *dest */ - paramListInfo, /* ParamListInfo params */ - queryEnv, /* QueryEnvironment *queryEnv */ - 0 /* int instrument_options */ - ); - #else - - /* PG15–17: eight‐arg CreateQueryDesc without CachedPlan */ QueryDesc *queryDesc = CreateQueryDesc( taskPlan, /* PlannedStmt *plannedstmt */ queryString, /* const char *sourceText */ @@ -792,8 +774,6 @@ ExecuteTaskPlan(PlannedStmt *taskPlan, char *queryString, queryEnv, /* QueryEnvironment *queryEnv */ 0 /* int instrument_options */ ); - #endif - ExecutorStart(queryDesc, eflags); diff --git a/src/backend/distributed/executor/multi_executor.c b/src/backend/distributed/executor/multi_executor.c index 3815382e0..dba302e7c 100644 --- a/src/backend/distributed/executor/multi_executor.c +++ b/src/backend/distributed/executor/multi_executor.c @@ -701,21 +701,6 @@ ExecutePlanIntoDestReceiver(PlannedStmt *queryPlan, ParamListInfo params, /* don't display the portal in pg_cursors, it is for internal use only */ portal->visible = false; -#if PG_VERSION_NUM >= PG_VERSION_18 - - /* PostgreSQL 18+ adds a seventh “plansource” argument */ - PortalDefineQuery( - portal, - NULL, /* no prepared statement name */ - "", /* query text */ - CMDTAG_SELECT, /* command tag */ - list_make1(queryPlan),/* list of PlannedStmt* */ - NULL, /* no CachedPlan */ - NULL /* no CachedPlanSource */ - ); -#else - - /* PostgreSQL 17-: six-arg signature */ PortalDefineQuery( portal, NULL, /* no prepared statement name */ @@ -724,7 +709,6 @@ ExecutePlanIntoDestReceiver(PlannedStmt *queryPlan, ParamListInfo params, list_make1(queryPlan),/* list of PlannedStmt* */ NULL /* no CachedPlan */ ); -#endif PortalStart(portal, params, eflags, GetActiveSnapshot()); diff --git a/src/backend/distributed/executor/partitioned_intermediate_results.c b/src/backend/distributed/executor/partitioned_intermediate_results.c index 55b01840c..60cdcbdfe 100644 --- a/src/backend/distributed/executor/partitioned_intermediate_results.c +++ b/src/backend/distributed/executor/partitioned_intermediate_results.c @@ -315,21 +315,6 @@ StartPortalForQueryExecution(const char *queryString) /* don't display the portal in pg_cursors, it is for internal use only */ portal->visible = false; -#if PG_VERSION_NUM >= PG_VERSION_18 - - /* PG 18+: new CachedPlanSource slot */ - PortalDefineQuery( - portal, - NULL, /* no prepared‐stmt name */ - queryString, /* the SQL text */ - CMDTAG_SELECT, /* we’re running a SELECT */ - list_make1(queryPlan), /* plan trees */ - NULL, /* no CachedPlan */ - NULL /* no CachedPlanSource */ - ); -#else - - /* PG 15–17: six‐arg signature */ PortalDefineQuery( portal, NULL, @@ -338,7 +323,6 @@ StartPortalForQueryExecution(const char *queryString) list_make1(queryPlan), NULL /* no CachedPlan */ ); -#endif int eflags = 0; PortalStart(portal, NULL, eflags, GetActiveSnapshot()); diff --git a/src/backend/distributed/planner/multi_explain.c b/src/backend/distributed/planner/multi_explain.c index c0affb50e..f357663a6 100644 --- a/src/backend/distributed/planner/multi_explain.c +++ b/src/backend/distributed/planner/multi_explain.c @@ -543,22 +543,7 @@ ExplainSubPlans(DistributedPlan *distributedPlan, ExplainState *es) } #endif -#if PG_VERSION_NUM >= PG_VERSION_18 - ExplainOnePlan( - plan, /* PlannedStmt *plannedstmt */ - NULL, /* CachedPlan *cplan */ - NULL, /* CachedPlanSource *plansource */ - 0, /* query_index */ - into, /* IntoClause *into */ - es, /* struct ExplainState *es */ - queryString, /* const char *queryString */ - params, /* ParamListInfo params */ - NULL, /* QueryEnvironment *queryEnv */ - &planduration, /* const instr_time *planduration */ - (es->buffers ? &bufusage : NULL),/* const BufferUsage *bufusage */ - (es->memory ? &mem_counters : NULL) /* const MemoryContextCounters *mem_counters */ - ); -#elif PG_VERSION_NUM >= PG_VERSION_17 +#if PG_VERSION_NUM >= PG_VERSION_17 ExplainOnePlan( plan, into, @@ -1606,22 +1591,7 @@ CitusExplainOneQuery(Query *query, int cursorOptions, IntoClause *into, } #endif -#if PG_VERSION_NUM >= PG_VERSION_18 - ExplainOnePlan( - plan, /* PlannedStmt *plannedstmt */ - NULL, /* no CachedPlan */ - NULL, /* no CachedPlanSource */ - 0, /* query_index */ - into, /* IntoClause *into */ - es, /* struct ExplainState *es */ - queryString, /* const char *queryString */ - params, /* ParamListInfo params */ - queryEnv, /* QueryEnvironment *queryEnv */ - &planduration, /* const instr_time *planduration */ - (es->buffers ? &bufusage : NULL), /* const BufferUsage *bufusage */ - (es->memory ? &mem_counters : NULL) /* const MemoryContextCounters *mem_counters */ - ); -#elif PG_VERSION_NUM >= PG_VERSION_17 +#if PG_VERSION_NUM >= PG_VERSION_17 /* PostgreSQL 17 signature (9 args: includes mem_counters) */ ExplainOnePlan( @@ -2107,22 +2077,7 @@ ExplainOneQuery(Query *query, int cursorOptions, } #endif -#if PG_VERSION_NUM >= PG_VERSION_18 - ExplainOnePlan( - plan, /* PlannedStmt *plannedstmt */ - NULL, /* CachedPlan *cplan */ - NULL, /* CachedPlanSource *plansource */ - 0, /* query_index */ - into, /* IntoClause *into */ - es, /* struct ExplainState *es */ - queryString, /* const char *queryString */ - params, /* ParamListInfo params */ - queryEnv, /* QueryEnvironment *queryEnv */ - &planduration, /* const instr_time *planduration */ - (es->buffers ? &bufusage : NULL), - (es->memory ? &mem_counters: NULL) - ); -#elif PG_VERSION_NUM >= PG_VERSION_17 +#if PG_VERSION_NUM >= PG_VERSION_17 ExplainOnePlan( plan, into, @@ -2146,7 +2101,6 @@ ExplainOneQuery(Query *query, int cursorOptions, (es->buffers ? &bufusage : NULL) ); #endif - } } @@ -2208,19 +2162,6 @@ ExplainWorkerPlan(PlannedStmt *plannedstmt, DestReceiver *dest, ExplainState *es UpdateActiveSnapshotCommandId(); /* Create a QueryDesc for the query */ - #if PG_VERSION_NUM >= PG_VERSION_18 - queryDesc = CreateQueryDesc( - plannedstmt, /* PlannedStmt *plannedstmt */ - NULL, /* CachedPlan *cplan (none) */ - queryString, /* const char *sourceText */ - GetActiveSnapshot(), /* Snapshot snapshot */ - InvalidSnapshot, /* Snapshot crosscheck_snapshot */ - dest, /* DestReceiver *dest */ - params, /* ParamListInfo params */ - queryEnv, /* QueryEnvironment *queryEnv */ - instrument_option /* int instrument_options */ - ); - #else queryDesc = CreateQueryDesc( plannedstmt, /* PlannedStmt *plannedstmt */ queryString, /* const char *sourceText */ @@ -2231,7 +2172,6 @@ ExplainWorkerPlan(PlannedStmt *plannedstmt, DestReceiver *dest, ExplainState *es queryEnv, /* QueryEnvironment *queryEnv */ instrument_option /* int instrument_options */ ); - #endif /* Select execution options */ if (es->analyze) diff --git a/src/backend/distributed/shared_library_init.c b/src/backend/distributed/shared_library_init.c index 61b16610b..165aea05f 100644 --- a/src/backend/distributed/shared_library_init.c +++ b/src/backend/distributed/shared_library_init.c @@ -386,51 +386,29 @@ static const struct config_enum_entry metadata_sync_mode_options[] = { /*----------------------------------------------------------------------* -* On PG 18+ the hook signatures changed; we wrap the old Citus handlers -* in fresh functions that match the new typedefs exactly. +* On PG 18+ the hook signature changed; we wrap the old Citus handler +* in a fresh function that matches the new typedef exactly. *----------------------------------------------------------------------*/ -#if PG_VERSION_NUM >= PG_VERSION_18 -static bool -citus_executor_start_adapter(QueryDesc *queryDesc, int eflags) -{ - /* PG18+ expects a bool return */ - CitusExecutorStart(queryDesc, eflags); - return true; -} - - static void citus_executor_run_adapter(QueryDesc *queryDesc, ScanDirection direction, - uint64 count) -{ - /* PG18+ has no run_once flag - * call the original Citus hook (which still expects the old 4-arg form) */ - CitusExecutorRun(queryDesc, direction, count, true); -} - - -#else - -/* PG15–17: adapter signatures must match the *old* typedefs */ -static void -citus_executor_start_adapter(QueryDesc *queryDesc, int eflags) -{ - CitusExecutorStart(queryDesc, eflags); -} - - -static void -citus_executor_run_adapter(QueryDesc *queryDesc, - ScanDirection direction, - uint64 count, - bool run_once) -{ - CitusExecutorRun(queryDesc, direction, count, run_once); -} - - + uint64 count +#if PG_VERSION_NUM < PG_VERSION_18 + , bool run_once #endif + ) +{ + /* PG18+ has no run_once flag */ + CitusExecutorRun(queryDesc, + direction, + count, +#if PG_VERSION_NUM >= PG_VERSION_18 + true +#else + run_once +#endif + ); +} /* shared library initialization function */ @@ -507,7 +485,7 @@ _PG_init(void) set_rel_pathlist_hook = multi_relation_restriction_hook; get_relation_info_hook = multi_get_relation_info_hook; set_join_pathlist_hook = multi_join_restriction_hook; - ExecutorStart_hook = citus_executor_start_adapter; + ExecutorStart_hook = CitusExecutorStart; ExecutorRun_hook = citus_executor_run_adapter; ExplainOneQuery_hook = CitusExplainOneQuery; prev_ExecutorEnd = ExecutorEnd_hook; diff --git a/src/backend/distributed/utils/background_jobs.c b/src/backend/distributed/utils/background_jobs.c index 6d491a6b3..2d0f03a4c 100644 --- a/src/backend/distributed/utils/background_jobs.c +++ b/src/backend/distributed/utils/background_jobs.c @@ -1907,20 +1907,6 @@ ExecuteSqlString(const char *sql) /* Don't display the portal in pg_cursors */ portal->visible = false; - #if PG_VERSION_NUM >= PG_VERSION_18 - - /* PG18+ added a seventh “plansource” argument */ - PortalDefineQuery( - portal, - NULL, /* no prepared‐stmt name */ - sql, /* the query text */ - commandTag, /* the CommandTag */ - plantree_list, /* List of PlannedStmt* */ - NULL, /* no CachedPlan */ - NULL /* no CachedPlanSource */ - ); - #else - /* PG17-: six‐arg signature */ PortalDefineQuery( portal, @@ -1930,7 +1916,6 @@ ExecuteSqlString(const char *sql) plantree_list, /* List of PlannedStmt* */ NULL /* no CachedPlan */ ); - #endif PortalStart(portal, NULL, 0, InvalidSnapshot); int16 format[] = { 1 };