Re: Split index and table statistics into different types of stats
От | Drouvot, Bertrand |
---|---|
Тема | Re: Split index and table statistics into different types of stats |
Дата | |
Msg-id | 06a5ac56-7d9e-ccd8-6566-f076f5139354@gmail.com обсуждение исходный текст |
Ответ на | Re: Split index and table statistics into different types of stats (Andres Freund <andres@anarazel.de>) |
Ответы |
Re: Split index and table statistics into different types of stats
|
Список | pgsql-hackers |
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
В списке pgsql-hackers по дате отправления: