Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ox6vt-00027d-1m for pgsql-hackers@arkaria.postgresql.org; Mon, 21 Nov 2022 13:33:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ox6vr-0007q2-5S for pgsql-hackers@arkaria.postgresql.org; Mon, 21 Nov 2022 13:33:55 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ox6vq-0007pt-Qt for pgsql-hackers@lists.postgresql.org; Mon, 21 Nov 2022 13:33:54 +0000 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ox6vl-0005Ca-Lq for pgsql-hackers@lists.postgresql.org; Mon, 21 Nov 2022 13:33:54 +0000 Received: by mail-wr1-x429.google.com with SMTP id x5so15811544wrt.7 for ; Mon, 21 Nov 2022 05:33:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=uq9jiN1WqQSaJ41C80XQwW/xKEIlorAstxN360HrCJk=; b=Wouuso/HYJS1g6pwM+6V/5VQF7HlIN/LXGWrbEethUL0gV1RSsEkW3bTMpcd5rs8AD +0LLSJgEZVMebApQ/gNfURJ+WBI6bF/PrHvu0vEVQDVzbNREf/iGjbFpElHUqyCI4xpQ sEuubiiV3VHZ5Te5iV0+YeTxfNd3XrLVYmOn2QNaRBalU4ifJHNQ+8Xcc/gAVkNFA2ha nAtWBDsiy1HQN+X7r4XQLETK3I5WT2adbEw0Fvxxd5c1jaFEW3z204MRfmUvpg30U+Zg YNGwXfMktK6fs5+rIym3/KtZzjDFx5BSNDSGTf9BoWksOh+/L3NZrFw+qM4jJWhWVJxF S4Pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=uq9jiN1WqQSaJ41C80XQwW/xKEIlorAstxN360HrCJk=; b=zDZFLT2SECu7uJItr4lXP1x5tcG1PKBsjkRheoAXnypLOTb7CxOu9qftPAaKIcGbHb FPhsk9uj+dP6WFYWsuoUwuUS7DQJcWHBbcGtMTY2VT/ZvGoxfmeUc5cOr6fuNSZeG+Yc bthKzCZP4HoMO8e/Zf70VP0nHOtrKqxADlMIkM3K0GdRlKqzVvlR5YX8QBAw9grT64f9 RWwslW77skQ+bjXvdHX+N4s0ODxxNPl8WsLwzTQWxRh274PmUoGh2aRskbwvUNt5sVpd whnU9IqdP5fPIk1+u63A1/zIkXIYCFf70nWrwK6GAJXequtsaG6Uqg6UN9u31/riDngs 3nRA== X-Gm-Message-State: ANoB5pmyFVqC4Z0OqKiPOyfyXXHfOMQrI1r9wtd11YI/gB/h1Q94NwWn 53bBYHpro0iAMnCwlpqLCnU= X-Google-Smtp-Source: AA0mqf6Ss4ydYogGWOIKw/ZeCx6Q0kTHJeVP5paWwAw3b7Q/jrUjV+nPfgEeOOeep/4OxjnIA4UO9A== X-Received: by 2002:a5d:4acd:0:b0:236:d8f8:b87d with SMTP id y13-20020a5d4acd000000b00236d8f8b87dmr4018226wrs.343.1669037628078; Mon, 21 Nov 2022 05:33:48 -0800 (PST) Received: from [192.168.21.40] ([54.239.6.189]) by smtp.gmail.com with ESMTPSA id c20-20020adfa314000000b00241d21d4652sm4454015wrb.21.2022.11.21.05.33.47 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 21 Nov 2022 05:33:47 -0800 (PST) Message-ID: <06a5ac56-7d9e-ccd8-6566-f076f5139354@gmail.com> Date: Mon, 21 Nov 2022 14:32:31 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: Re: Split index and table statistics into different types of stats To: Andres Freund Cc: Melanie Plageman , PostgreSQL Hackers References: <20221101003006.3ehvn2prai26rkrf@awork3.anarazel.de> <4cc5476f-4360-1bed-c60d-2c21adf7db13@gmail.com> <06517d27-7a81-3b60-60c4-9a92c6498981@gmail.com> <8e8713ed-1663-f39b-effc-bd3e1632039a@gmail.com> <20221116201202.3k74ajawyom2c3eq@awork3.anarazel.de> <76dece9f-160a-0210-0396-9146c8e4831a@gmail.com> <20221120231906.aayfz5jpipqd6hoz@awork3.anarazel.de> Content-Language: en-US From: "Drouvot, Bertrand" In-Reply-To: <20221120231906.aayfz5jpipqd6hoz@awork3.anarazel.de> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hi, On 11/21/22 12:19 AM, Andres Freund wrote: > Hi, > > On 2022-11-18 12:18:38 +0100, Drouvot, Bertrand wrote: >> On 11/16/22 9:12 PM, Andres Freund wrote: >>> This still leaves a fair bit of boilerplate. ISTM that the function body >>> really should just be a single line. >>> >>> Might even be worth defining the whole function via a macro. Perhaps something like >>> >>> PGSTAT_DEFINE_REL_FIELD_ACCESSOR(PGSTAT_KIND_INDEX, pg_stat_get_index, numscans); >> >> Thanks for the feedback! >> >> Right, what about something like the following? >> >> " >> #define PGSTAT_FETCH_STAT_ENTRY(pgstat_entry_kind, pgstat_fetch_stat_function, relid, stat_name) \ >> do { \ >> pgstat_entry_kind *entry = pgstat_fetch_stat_function(relid); \ >> PG_RETURN_INT64(entry == NULL ? 0 : (int64) (entry->stat_name)); \ >> } while (0) >> >> Datum >> pg_stat_get_index_numscans(PG_FUNCTION_ARGS) >> { >> PGSTAT_FETCH_STAT_ENTRY(PgStat_StatIndEntry, pgstat_fetch_stat_indentry, PG_GETARG_OID(0), numscans); >> } >> " > > That's better, but still seems like quite a bit of repetition, given the > number of accessors. I think I like my idea of a macro defining the whole > function a bit better. > Got it, what about creating another preparatory commit to first introduce something like: " #define PGSTAT_DEFINE_REL_FIELD_ACCESSOR(function_name_prefix, stat_name) \ Datum \ function_name_prefix##_##stat_name(PG_FUNCTION_ARGS) \ { \ Oid relid = PG_GETARG_OID(0); \ int64 result; \ PgStat_StatTabEntry *tabentry; \ if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL) \ result = 0; \ else \ result = (int64) (tabentry->stat_name); \ PG_RETURN_INT64(result); \ } \ PGSTAT_DEFINE_REL_FIELD_ACCESSOR(pg_stat_get, numscans); PGSTAT_DEFINE_REL_FIELD_ACCESSOR(pg_stat_get, tuples_returned); . . . " If that makes sense to you, I'll submit this preparatory patch. > Now merged. Thanks! Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com