From 24b2d144cff961c514579b998de59112099fe3c0 Mon Sep 17 00:00:00 2001 From: Oleg Tselebrovskiy Date: Thu, 10 Apr 2025 16:55:29 +0700 Subject: [PATCH 1/7] Fix return of pgws_ExecutorStart since some systems gave warnings when returning from void functions --- pg_wait_sampling.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pg_wait_sampling.c b/pg_wait_sampling.c index a35fb94..81c37ea 100644 --- a/pg_wait_sampling.c +++ b/pg_wait_sampling.c @@ -995,9 +995,17 @@ pgws_ExecutorStart(QueryDesc *queryDesc, int eflags) if (pgws_enabled(nesting_level)) pgws_proc_queryids[i] = queryDesc->plannedstmt->queryId; if (prev_ExecutorStart) +#if PG_VERSION_NUM >= 180000 return prev_ExecutorStart(queryDesc, eflags); +#else + prev_ExecutorStart(queryDesc, eflags); +#endif else +#if PG_VERSION_NUM >= 180000 return standard_ExecutorStart(queryDesc, eflags); +#else + standard_ExecutorStart(queryDesc, eflags); +#endif } static void From 9d713ce514e5b96b13fd6aa1980b6db11ec9ed45 Mon Sep 17 00:00:00 2001 From: Oleg Tselebrovskiy Date: Wed, 28 May 2025 12:35:29 +0700 Subject: [PATCH 2/7] Revert "Fix return of pgws_ExecutorStart since some systems gave warnings when returning from void functions" This reverts commit 24b2d144cff961c514579b998de59112099fe3c0. --- pg_wait_sampling.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/pg_wait_sampling.c b/pg_wait_sampling.c index 81c37ea..a35fb94 100644 --- a/pg_wait_sampling.c +++ b/pg_wait_sampling.c @@ -995,17 +995,9 @@ pgws_ExecutorStart(QueryDesc *queryDesc, int eflags) if (pgws_enabled(nesting_level)) pgws_proc_queryids[i] = queryDesc->plannedstmt->queryId; if (prev_ExecutorStart) -#if PG_VERSION_NUM >= 180000 return prev_ExecutorStart(queryDesc, eflags); -#else - prev_ExecutorStart(queryDesc, eflags); -#endif else -#if PG_VERSION_NUM >= 180000 return standard_ExecutorStart(queryDesc, eflags); -#else - standard_ExecutorStart(queryDesc, eflags); -#endif } static void From fafeda026efb260cdcd4e31e21e6166a41521fb9 Mon Sep 17 00:00:00 2001 From: Oleg Tselebrovskiy Date: Wed, 28 May 2025 12:38:45 +0700 Subject: [PATCH 3/7] Revert "Fix compatibility with pg18" This reverts commit dd524f2dde44b3907aa457777192c19d3dba9097. --- pg_wait_sampling.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/pg_wait_sampling.c b/pg_wait_sampling.c index a35fb94..f5bd6e0 100644 --- a/pg_wait_sampling.c +++ b/pg_wait_sampling.c @@ -76,13 +76,7 @@ static PlannedStmt *pgws_planner_hook(Query *parse, const char *query_string, #endif int cursorOptions, ParamListInfo boundParams); -static -#if PG_VERSION_NUM >= 180000 -bool -#else -void -#endif -pgws_ExecutorStart(QueryDesc *queryDesc, int eflags); +static void pgws_ExecutorStart(QueryDesc *queryDesc, int eflags); static void pgws_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count @@ -982,12 +976,7 @@ pgws_planner_hook(Query *parse, /* * ExecutorStart hook: save queryId for collector */ -static -#if PG_VERSION_NUM >= 180000 -bool -#else -void -#endif +static void pgws_ExecutorStart(QueryDesc *queryDesc, int eflags) { int i = MyProc - ProcGlobal->allProcs; @@ -995,9 +984,9 @@ pgws_ExecutorStart(QueryDesc *queryDesc, int eflags) if (pgws_enabled(nesting_level)) pgws_proc_queryids[i] = queryDesc->plannedstmt->queryId; if (prev_ExecutorStart) - return prev_ExecutorStart(queryDesc, eflags); + prev_ExecutorStart(queryDesc, eflags); else - return standard_ExecutorStart(queryDesc, eflags); + standard_ExecutorStart(queryDesc, eflags); } static void From 930a67a235f5c2e5e4e9868c22f9bb8289cba45e Mon Sep 17 00:00:00 2001 From: Valeriy Zainullin Date: Thu, 19 Jun 2025 18:16:01 +0300 Subject: [PATCH 4/7] Check collector has started in pg_wait_sampling_reset_profile. The worker might have not started yet or it may never start, because its registration was cancelled due to worker limit. This commit adds a check for NULL value of pgws_collector_hdr->latch. The previous usage in pg_wait_sampling.c has such a check, we should do the same here. --- pg_wait_sampling.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pg_wait_sampling.c b/pg_wait_sampling.c index f5bd6e0..e165a6a 100644 --- a/pg_wait_sampling.c +++ b/pg_wait_sampling.c @@ -649,6 +649,10 @@ receive_array(SHMRequest request, Size item_size, Size *count) pgws_collector_hdr->request = request; LockRelease(&collectorTag, ExclusiveLock, false); + /* + * Check that the collector was started to avoid NULL + * pointer dereference. + */ if (!pgws_collector_hdr->latch) ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg("pg_wait_sampling collector wasn't started"))); @@ -819,6 +823,14 @@ pg_wait_sampling_reset_profile(PG_FUNCTION_ARGS) pgws_collector_hdr->request = PROFILE_RESET; LockRelease(&collectorTag, ExclusiveLock, false); + /* + * Check that the collector was started to avoid NULL + * pointer dereference. + */ + if (!pgws_collector_hdr->latch) + ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), + errmsg("pg_wait_sampling collector wasn't started"))); + SetLatch(pgws_collector_hdr->latch); LockRelease(&queueTag, ExclusiveLock, false); From f96fb9eaf0b02709af5f9998d6982061bcc7eb70 Mon Sep 17 00:00:00 2001 From: Sergey Shinderuk Date: Mon, 4 Aug 2025 18:27:26 +0300 Subject: [PATCH 5/7] Fix Travis CI build --- .travis.yml | 2 +- run-tests.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2c63eff..98d4318 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ dist: jammy language: c env: -- PG_MAJOR=18 SNAPSHOT=1 +- PG_MAJOR=18 BETA=1 - PG_MAJOR=17 - PG_MAJOR=16 - PG_MAJOR=15 diff --git a/run-tests.sh b/run-tests.sh index f3f1bba..f42e999 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -6,6 +6,7 @@ export PGDATA=/var/lib/postgresql/$PG_MAJOR/test export COPT=-Werror export USE_PGXS=1 +sudo mkdir -p /var/lib/postgresql/$PG_MAJOR sudo chmod 1777 /var/lib/postgresql/$PG_MAJOR sudo chmod 1777 /var/run/postgresql From 899ea541fbf9a8bbb41ca74dcc8142c531a5f137 Mon Sep 17 00:00:00 2001 From: Georgy Shelkovy Date: Thu, 9 Oct 2025 09:15:58 +0500 Subject: [PATCH 6/7] postgres 19 support Commit postgres/postgres@c83ac02 added new last argument ExplainState *es to standard_planner function and planner_hook_type type. --- pg_wait_sampling.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/pg_wait_sampling.c b/pg_wait_sampling.c index e165a6a..7e8abb9 100644 --- a/pg_wait_sampling.c +++ b/pg_wait_sampling.c @@ -75,7 +75,11 @@ static PlannedStmt *pgws_planner_hook(Query *parse, #if PG_VERSION_NUM >= 130000 const char *query_string, #endif - int cursorOptions, ParamListInfo boundParams); + int cursorOptions, ParamListInfo boundParams +#if PG_VERSION_NUM >= 190000 + , ExplainState *es +#endif + ); static void pgws_ExecutorStart(QueryDesc *queryDesc, int eflags); static void pgws_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, @@ -937,7 +941,11 @@ pgws_planner_hook(Query *parse, const char *query_string, #endif int cursorOptions, - ParamListInfo boundParams) + ParamListInfo boundParams +#if PG_VERSION_NUM >= 190000 + , ExplainState *es +#endif + ) { PlannedStmt *result; int i = MyProc - ProcGlobal->allProcs; @@ -958,13 +966,21 @@ pgws_planner_hook(Query *parse, #if PG_VERSION_NUM >= 130000 query_string, #endif - cursorOptions, boundParams); + cursorOptions, boundParams +#if PG_VERSION_NUM >= 190000 + , es +#endif + ); else result = standard_planner(parse, #if PG_VERSION_NUM >= 130000 query_string, #endif - cursorOptions, boundParams); + cursorOptions, boundParams +#if PG_VERSION_NUM >= 190000 + , es +#endif + ); nesting_level--; if (nesting_level == 0) pgws_proc_queryids[i] = UINT64CONST(0); From 91b163ddc377f263fbcdf13c8c736a6361598de9 Mon Sep 17 00:00:00 2001 From: Oleg Tselebrovskiy Date: Tue, 14 Oct 2025 16:40:24 +0700 Subject: [PATCH 7/7] Add PG-19 to travis-ci --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 98d4318..f68e8de 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,8 @@ dist: jammy language: c env: -- PG_MAJOR=18 BETA=1 +- PG_MAJOR=19 SNAPSHOT=1 +- PG_MAJOR=18 - PG_MAJOR=17 - PG_MAJOR=16 - PG_MAJOR=15