mirror of
https://github.com/postgres/postgres.git
synced 2025-07-23 03:21:12 +03:00
Refactor code of pg_stat_get_wal() building result tuple
This commit adds to pgstatfuncs.c a new routine called pg_stat_wal_build_tuple(), helper routine for pg_stat_get_wal(). This is in charge of filling one tuple based on the contents of PgStat_WalStats retrieved from pgstats. This refactoring will be used by an upcoming patch introducing backend-level WAL statistics, simplifying the main patch. Note that it is not possible for stats_reset to be NULL in pg_stat_wal; backend statistics need to be able to handle this case. Author: Bertrand Drouvot <bertranddrouvot.pg@gmail.com> Discussion: https://postgr.es/m/Z3zqc4o09dM/Ezyz@ip-10-97-1-34.eu-west-3.compute.internal
This commit is contained in:
@ -1632,21 +1632,23 @@ pg_stat_get_backend_io(PG_FUNCTION_ARGS)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns statistics of WAL activity
|
* pg_stat_wal_build_tuple
|
||||||
|
*
|
||||||
|
* Helper routine for pg_stat_get_wal() returning one tuple based on the
|
||||||
|
* contents of wal_counters.
|
||||||
*/
|
*/
|
||||||
Datum
|
static Datum
|
||||||
pg_stat_get_wal(PG_FUNCTION_ARGS)
|
pg_stat_wal_build_tuple(PgStat_WalCounters wal_counters,
|
||||||
|
TimestampTz stat_reset_timestamp)
|
||||||
{
|
{
|
||||||
#define PG_STAT_GET_WAL_COLS 5
|
#define PG_STAT_WAL_COLS 5
|
||||||
TupleDesc tupdesc;
|
TupleDesc tupdesc;
|
||||||
Datum values[PG_STAT_GET_WAL_COLS] = {0};
|
Datum values[PG_STAT_WAL_COLS] = {0};
|
||||||
bool nulls[PG_STAT_GET_WAL_COLS] = {0};
|
bool nulls[PG_STAT_WAL_COLS] = {0};
|
||||||
char buf[256];
|
char buf[256];
|
||||||
PgStat_WalStats *wal_stats;
|
|
||||||
PgStat_WalCounters wal_counters;
|
|
||||||
|
|
||||||
/* Initialise attributes information in the tuple descriptor */
|
/* Initialise attributes information in the tuple descriptor */
|
||||||
tupdesc = CreateTemplateTupleDesc(PG_STAT_GET_WAL_COLS);
|
tupdesc = CreateTemplateTupleDesc(PG_STAT_WAL_COLS);
|
||||||
TupleDescInitEntry(tupdesc, (AttrNumber) 1, "wal_records",
|
TupleDescInitEntry(tupdesc, (AttrNumber) 1, "wal_records",
|
||||||
INT8OID, -1, 0);
|
INT8OID, -1, 0);
|
||||||
TupleDescInitEntry(tupdesc, (AttrNumber) 2, "wal_fpi",
|
TupleDescInitEntry(tupdesc, (AttrNumber) 2, "wal_fpi",
|
||||||
@ -1660,10 +1662,6 @@ pg_stat_get_wal(PG_FUNCTION_ARGS)
|
|||||||
|
|
||||||
BlessTupleDesc(tupdesc);
|
BlessTupleDesc(tupdesc);
|
||||||
|
|
||||||
/* Get statistics about WAL activity */
|
|
||||||
wal_stats = pgstat_fetch_stat_wal();
|
|
||||||
wal_counters = wal_stats->wal_counters;
|
|
||||||
|
|
||||||
/* Fill values and NULLs */
|
/* Fill values and NULLs */
|
||||||
values[0] = Int64GetDatum(wal_counters.wal_records);
|
values[0] = Int64GetDatum(wal_counters.wal_records);
|
||||||
values[1] = Int64GetDatum(wal_counters.wal_fpi);
|
values[1] = Int64GetDatum(wal_counters.wal_fpi);
|
||||||
@ -1677,12 +1675,30 @@ pg_stat_get_wal(PG_FUNCTION_ARGS)
|
|||||||
|
|
||||||
values[3] = Int64GetDatum(wal_counters.wal_buffers_full);
|
values[3] = Int64GetDatum(wal_counters.wal_buffers_full);
|
||||||
|
|
||||||
values[4] = TimestampTzGetDatum(wal_stats->stat_reset_timestamp);
|
if (stat_reset_timestamp != 0)
|
||||||
|
values[4] = TimestampTzGetDatum(stat_reset_timestamp);
|
||||||
|
else
|
||||||
|
nulls[4] = true;
|
||||||
|
|
||||||
/* Returns the record as Datum */
|
/* Returns the record as Datum */
|
||||||
PG_RETURN_DATUM(HeapTupleGetDatum(heap_form_tuple(tupdesc, values, nulls)));
|
PG_RETURN_DATUM(HeapTupleGetDatum(heap_form_tuple(tupdesc, values, nulls)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns statistics of WAL activity
|
||||||
|
*/
|
||||||
|
Datum
|
||||||
|
pg_stat_get_wal(PG_FUNCTION_ARGS)
|
||||||
|
{
|
||||||
|
PgStat_WalStats *wal_stats;
|
||||||
|
|
||||||
|
/* Get statistics about WAL activity */
|
||||||
|
wal_stats = pgstat_fetch_stat_wal();
|
||||||
|
|
||||||
|
return (pg_stat_wal_build_tuple(wal_stats->wal_counters,
|
||||||
|
wal_stats->stat_reset_timestamp));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns statistics of SLRU caches.
|
* Returns statistics of SLRU caches.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user