Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wlmuO-000Nxc-2G for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Jul 2026 12:15:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wlmuO-003HLt-1M for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Jul 2026 12:15:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wlmuO-003HLl-05 for pgsql-hackers@lists.postgresql.org; Mon, 20 Jul 2026 12:15:43 +0000 Received: from fout-a6-smtp.messagingengine.com ([103.168.172.149]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wlmuK-00000000GlV-2sSP for pgsql-hackers@lists.postgresql.org; Mon, 20 Jul 2026 12:15:43 +0000 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfout.phl.internal (Postfix) with ESMTP id 4FE73EC017B; Mon, 20 Jul 2026 08:15:38 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Mon, 20 Jul 2026 08:15:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784549738; x=1784636138; bh=K 5JD7usK4fF4E42pkp+VYiPpOO1xR3RAdmtT/bHRLH8=; b=nAUzytby3PXFffz+h ypowjeKYmzcr6RKismDCF6q3lmF5dBU/qYE9FnXssVNfCvHwGxggAbaHr/vUqmFX siirfShkNmVLt3oVEdP6gHLs7U6LJc4SJ09LOMR5jdzgxGu+3fBXPG68c59hzdWi z1FDOHpfaK8Kapuj8DygKUxzRW3EkQW6aEjtjqvy9NiHFgcipWsD9b0Yc5wiGP9M rAVV0zOE0n9Lk/WuucMcFt+JAwip0eDkmuNC+kFKNEd/62c3WuHiZYG/xcFTPdgf ockqE6OYharDzjIkcf0FSkjXaG8wSFsI3cK1SLg3gRKpVlJWKnuySsmiz7gp/XBT 2ew7Q== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTELQhcGe/pHfoiThFcqy71jODCxUN6WunSx/Nj+/N69KpUvZiaTgzYElzAvHSSuTB kF2b9wUOwunssl0KNh22kHtdgxQ0nnNeQPIsHyD5lJFt3EqUQlFG+k/cYn/UeuPG9KkZ8u t//IZ3dEe9Rbf/HWmEGkpMAnUO9ubkEVslWkYdN8EJWJtcA7pFoUjJBX8LctVG70MMEfpw HaFy8A++Nms3YiElyScRHkP4jlthhZBNRx6ejxxL2k+TN+PKYYDaa4ROUbjlSTzIvWOOEJ bbXdZlGhHQwRx7U19v78E2LGLCuv4Gw8HRRYZxN1BIReR3CqS3jlM/mvLhVVi25qf0t2Y5 D+S9kxxfDB9bU2x1S7HV7/Bs/nNa0o5D5O/oqw24rX5zwJi468AC3Nx3v2301W4lg24Cjn GvEVVlNuyuDk533H+rXaSapnV5fSqDTEBX2o82+ECQoSQry9LZMmHVcxQr8R6VKABCT+5G OTzIdd8zQN5idLzOw/DYmnwpsc/Pb9sCclDb+ZNcmaPFFZS4y/EcKRZdw07uUQh63enjVD D2vklCt2/A8eqASKvzwTAmWRFXoy5iLQAY6eGj7lhQQnM2ZJQac/LUmquqCphacCNNoz4J EncyMRPGFApJTZ5O0L2dHLSSM97LZCgiml5hzsFxLsGQex2DYA9Sxq50kDjA X-ME-Proxy: Feedback-ID: ia2694551:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 20 Jul 2026 08:15:37 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alvh.no-ip.org; s=schmee; t=1784549736; bh=seGy0Eut73ICBkxbHfjbNIXuixzmVn5c2sNxEhcK13c=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=fKtZW5jaMosvHprg7I2DBAvvzsIfH3hf4LdqU7bycdzNQElWJMiS9nKJXMaA7BAPQ HC5sz42C8DcLcG2FRCDLRxmDt7SNPp41uBPXukpScrG54uCpN80UmfTBUmPQWmY1gw fetAvUnTeAtr2t9cs0AJ92zjQ+9rOVVEew40CgYQbPz5lsjXEYEYuHjbBj/8mbDBll L2PzsRLCg3TH5ili1xN2FKWv8MHEqNmUMlbdgY+T7wNicxgzbNv3Xy6c5WEl/DlFhO Q3HDeD/K+5uv9Mip4owMgl7KejgtuKgRLOknI8fHVxq37tguokLwF65nFVKKa5YtDM rzjabsVteK73Q== Received: by ida.kurilemu.internal (Postfix, from userid 1000) id 409AEB00813; Mon, 20 Jul 2026 14:15:36 +0200 (CEST) Date: Mon, 20 Jul 2026 14:15:36 +0200 From: Alvaro Herrera To: Chao Li Cc: Euler Taveira , japin , Andres Freund , pgsql-hackers@lists.postgresql.org Subject: Re: log_min_messages per backend type Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="dnohjpfxulhc3bo3" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <396CA546-7368-426C-B047-492564707ACB@gmail.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --dnohjpfxulhc3bo3 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit Hello, Here's a couple of trivial cleanups of this code. 0001 simplifies code and removes a duplicate by creating a small subroutine; 0002 also simplifies memory freeing a tad, by freeing allocations as soon as no longer needed instead of waiting and being forced to duplicate the frees in several places. This is two commits here just for ease of review, but I'd probably push as one commit (and without backpatch). -- Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/ "World domination is proceeding according to plan" (Andrew Morton) --dnohjpfxulhc3bo3 Content-Type: text/x-diff; charset=utf-8 Content-Disposition: attachment; filename=0001-simplify-coding-in-check_log_min_messages.patch From 4a781c3cc700f455705994dbc36c34355defcd31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= Date: Tue, 17 Feb 2026 16:33:18 +0100 Subject: [PATCH 1/2] simplify coding in check_log_min_messages --- src/backend/utils/error/elog.c | 47 ++++++++++++++-------------------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index b9d2c96b97a..80d4eef755a 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -193,6 +193,7 @@ static pg_noinline void set_backtrace(ErrorData *edata, int num_skip); static void backtrace_cleanup(int code, Datum arg); static void set_errdata_field(MemoryContextData *cxt, char **ptr, const char *str); static void FreeErrorDataContents(ErrorData *edata); +static int parse_message_level(const char *level); static int log_min_messages_cmp(const ListCell *a, const ListCell *b); static void write_console(const char *line, int len); static const char *process_log_prefix_padding(const char *p, int *ppadding); @@ -2403,9 +2404,6 @@ check_log_min_messages(char **newval, void **extra, GucSource source) */ if (sep == NULL) { - const struct config_enum_entry *entry; - bool found; - /* Reject duplicates for default log level. */ if (defaultlevel != -1) { @@ -2414,18 +2412,7 @@ check_log_min_messages(char **newval, void **extra, GucSource source) } /* Validate the log level */ - found = false; - for (entry = server_message_level_options; entry && entry->name; entry++) - { - if (pg_strcasecmp(entry->name, elem) == 0) - { - defaultlevel = entry->val; - found = true; - break; - } - } - - if (!found) + if ((defaultlevel = parse_message_level(elem)) == 0) { GUC_check_errdetail("Unrecognized log level: \"%s\".", elem); goto lmm_fail; @@ -2437,7 +2424,6 @@ check_log_min_messages(char **newval, void **extra, GucSource source) char *ptype = elem; bool found; int level; - const struct config_enum_entry *entry; /* * Temporarily clobber the ':' with a string terminator, so that @@ -2446,18 +2432,7 @@ check_log_min_messages(char **newval, void **extra, GucSource source) *sep = '\0'; /* Validate the log level */ - found = false; - for (entry = server_message_level_options; entry && entry->name; entry++) - { - if (pg_strcasecmp(entry->name, loglevel) == 0) - { - level = entry->val; - found = true; - break; - } - } - - if (!found) + if ((level = parse_message_level(loglevel)) == 0) { GUC_check_errdetail("Unrecognized log level for process type \"%s\": \"%s\".", ptype, loglevel); @@ -2566,6 +2541,22 @@ lmm_fail: return true; } +/* + * Recognize the given string as a message level (for log_min_messages), and + * return its value if successful. Otherwise, return 0. + */ +static int +parse_message_level(const char *level) +{ + const struct config_enum_entry *entry; + + for (entry = server_message_level_options; entry && entry->name; entry++) + if (pg_strcasecmp(entry->name, level) == 0) + return entry->val; + + return 0; +} + /* * list_sort() callback for check_log_min_messages. The default element * goes first; the rest are ordered by strcmp() of the process type. -- 2.47.3 --dnohjpfxulhc3bo3 Content-Type: text/x-diff; charset=utf-8 Content-Disposition: attachment; filename=0002-memory-free-simplify.patch From 6f31ae2fb2506f05c0a9bb9da3a88c1266d5f457 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= Date: Sun, 5 Jul 2026 14:10:18 +0200 Subject: [PATCH 2/2] memory free simplify --- src/backend/utils/error/elog.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 80d4eef755a..7d229279dbe 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -2364,6 +2364,7 @@ bool check_log_min_messages(char **newval, void **extra, GucSource source) { char *rawstring; + int rawstring_len; List *elemlist; StringInfoData buf; char *result; @@ -2392,6 +2393,8 @@ check_log_min_messages(char **newval, void **extra, GucSource source) guc_free(rawstring); return false; } + rawstring_len = strlen(rawstring); + guc_free(rawstring); /* Validate and assign log level and process type. */ foreach_ptr(char, elem, elemlist) @@ -2478,7 +2481,6 @@ check_log_min_messages(char **newval, void **extra, GucSource source) continue; lmm_fail: - guc_free(rawstring); list_free(elemlist); return false; } @@ -2489,7 +2491,6 @@ lmm_fail: if (defaultlevel == -1) { GUC_check_errdetail("Default log level was not defined."); - guc_free(rawstring); list_free(elemlist); return false; } @@ -2507,7 +2508,7 @@ lmm_fail: */ list_sort(elemlist, log_min_messages_cmp); - initStringInfoExt(&buf, strlen(rawstring) + 1); + initStringInfoExt(&buf, rawstring_len + 1); foreach_ptr(char, elem, elemlist) { if (foreach_current_index(elem) == 0) @@ -2515,6 +2516,7 @@ lmm_fail: else appendStringInfo(&buf, ", %s", elem); } + list_free(elemlist); result = guc_strdup(LOG, buf.data); if (!result) @@ -2526,8 +2528,6 @@ lmm_fail: guc_free(*newval); *newval = result; - guc_free(rawstring); - list_free(elemlist); pfree(buf.data); /* -- 2.47.3 --dnohjpfxulhc3bo3--