On 2019-Dec-13, Kyotaro Horiguchi wrote:

> At Fri, 13 Dec 2019 13:05:41 +0800, Craig Ringer <cr...@2ndquadrant.com> 
> wrote in 
> > On Wed, 11 Dec 2019 at 02:08, Alvaro Herrera <alvhe...@2ndquadrant.com>
> > wrote:
> > 
> > > On 2019-Dec-10, Tomas Vondra wrote:
> > >
> > > > On Tue, Dec 10, 2019 at 09:42:17AM +0900, Kyotaro Horiguchi wrote:
> > > > > At Tue, 10 Dec 2019 00:44:09 +0100, Tomas Vondra <
> > > tomas.von...@2ndquadrant.com> wrote in
> > >
> > > > > I'm not sure how much xact_start for walsender is useful and we really
> > > > > is not running a statement there.  Also autovac launcher starts
> > > > > transaction without a valid statement timestamp perhaps for the same
> > > > > reason.
> > > >
> > > > Maybe, but then maybe we should change it so that we don't report any
> > > > timestamps for such processes.
> > >
> > > Yeah, I think we should to that.
> > Agreed. Don't report a transaction start timestamp at all if we're not in a
> > read/write txn in the walsender, which we should never be when using a
> > historic snapshot.
> > 
> > It's not interesting or relevant.

This patch changes xact.c to avoid updating transaction start timestamps
for walsenders (maybe more commentary is desirable).  I think logical
decoding is just a special form of walsender and thus it would also be
updated by this patch, unless I misunderstood what Tomas explained.

> > Reporting the commit timestamp of the current or last-processed xact would
> > likely just be confusing. I'd rather see that in pg_stat_replication if
> > we're going to show it, that way we can label it usefully.
> 
> Sounds reasonable.

Developers interested in this feature can submit a patch, as usual :-)

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index 5353b6ab0b..63652ab19f 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -816,6 +816,10 @@ GetCurrentTransactionStopTimestamp(void)
 void
 SetCurrentStatementStartTimestamp(void)
 {
+	/* walsenders don't want to have stmt timestamps */
+	if (am_walsender)
+		return;
+
 	if (!IsParallelWorker())
 		stmtStartTimestamp = GetCurrentTimestamp();
 	else

Reply via email to