diff --git a/src/backend/utils/activity/pgstat.c b/src/backend/utils/activity/pgstat.c
index d743fc0b28..b86c87bbe0 100644
--- a/src/backend/utils/activity/pgstat.c
+++ b/src/backend/utils/activity/pgstat.c
@@ -395,12 +395,27 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
 	},
 };
 
-
 /* ------------------------------------------------------------
  * Functions managing the state of the stats system for all backends.
  * ------------------------------------------------------------
  */
 
+/*
+ * Return the timestamp when called the first time. This is intended to be used
+ * to obatin the reset timestamp when a shared entry is created.
+ */
+TimestampTz
+pgstat_get_reset_timestamp(void)
+{
+	TimestampTz ts = GetCurrentTransactionStartTimestamp();
+
+	/* fall back to GetCurrentTimestamp if not available */
+	if (ts > 0)
+		return ts;
+
+	return GetCurrentTimestamp();
+}
+
 /*
  * Read on-disk stats into memory at server start.
  *
@@ -1683,7 +1698,7 @@ error:
 static void
 pgstat_reset_after_failure(void)
 {
-	TimestampTz ts = GetCurrentTimestamp();
+	TimestampTz ts = pgstat_get_reset_timestamp();
 
 	/* reset fixed-numbered stats */
 	for (int kind = PGSTAT_KIND_FIRST_VALID; kind <= PGSTAT_KIND_LAST; kind++)
diff --git a/src/backend/utils/activity/pgstat_shmem.c b/src/backend/utils/activity/pgstat_shmem.c
index d1149adf70..ff4d03150e 100644
--- a/src/backend/utils/activity/pgstat_shmem.c
+++ b/src/backend/utils/activity/pgstat_shmem.c
@@ -258,7 +258,9 @@ PgStatShared_Common *
 pgstat_init_entry(PgStat_Kind kind,
 				  PgStatShared_HashEntry *shhashent)
 {
-	/* Create new stats entry. */
+	const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind);
+
+		/* Create new stats entry. */
 	dsa_pointer chunk;
 	PgStatShared_Common *shheader;
 
@@ -278,6 +280,9 @@ pgstat_init_entry(PgStat_Kind kind,
 	/* Link the new entry from the hash entry. */
 	shhashent->body = chunk;
 
+	if (kind_info->reset_timestamp_cb)
+		kind_info->reset_timestamp_cb(shheader, pgstat_get_reset_timestamp());
+
 	LWLockInitialize(&shheader->lock, LWTRANCHE_PGSTATS_DATA);
 
 	return shheader;
@@ -286,6 +291,7 @@ pgstat_init_entry(PgStat_Kind kind,
 static PgStatShared_Common *
 pgstat_reinit_entry(PgStat_Kind kind, PgStatShared_HashEntry *shhashent)
 {
+	const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind);
 	PgStatShared_Common *shheader;
 
 	shheader = dsa_get_address(pgStatLocal.dsa, shhashent->body);
@@ -299,6 +305,9 @@ pgstat_reinit_entry(PgStat_Kind kind, PgStatShared_HashEntry *shhashent)
 	memset(pgstat_get_entry_data(kind, shheader), 0,
 		   pgstat_get_entry_len(kind));
 
+	if (kind_info->reset_timestamp_cb)
+		kind_info->reset_timestamp_cb(shheader, pgstat_get_reset_timestamp());
+
 	return shheader;
 }
 
diff --git a/src/include/pgstat.h b/src/include/pgstat.h
index 57a2c0866a..df2323c5bc 100644
--- a/src/include/pgstat.h
+++ b/src/include/pgstat.h
@@ -464,6 +464,7 @@ extern Size StatsShmemSize(void);
 extern void StatsShmemInit(void);
 
 /* Functions called during server startup / shutdown */
+extern TimestampTz pgstat_get_reset_timestamp(void);
 extern void pgstat_restore_stats(void);
 extern void pgstat_discard_stats(void);
 extern void pgstat_before_server_shutdown(int code, Datum arg);
