]> granicus.if.org Git - postgresql/commitdiff
Reset pg_stat_activity.xact_start during PREPARE TRANSACTION.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 24 Apr 2014 17:29:48 +0000 (13:29 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 24 Apr 2014 17:29:48 +0000 (13:29 -0400)
Once we've completed a PREPARE, our session is not running a transaction,
so its entry in pg_stat_activity should show xact_start as null, rather
than leaving the value as the start time of the now-prepared transaction.

I think possibly this oversight was triggered by faulty extrapolation
from the adjacent comment that says PrepareTransaction should not call
AtEOXact_PgStat, so tweak the wording of that comment.

Noted by Andres Freund while considering bug #10123 from Maxim Boguk,
although this error doesn't seem to explain that report.

Back-patch to all active branches.

src/backend/access/transam/xact.c

index b20d9732e78a7ba79f0eb19e6ac42a8365fdee2c..9ee11f34f2c35742ec9bc881ecc5f2da00b9cf01 100644 (file)
@@ -2280,8 +2280,9 @@ PrepareTransaction(void)
        AtEOXact_Files();
        AtEOXact_ComboCid();
        AtEOXact_HashTables(true);
-       /* don't call AtEOXact_PgStat here */
+       /* don't call AtEOXact_PgStat here; we fixed pgstat state above */
        AtEOXact_Snapshot(true);
+       pgstat_report_xact_timestamp(0);
 
        CurrentResourceOwner = NULL;
        ResourceOwnerDelete(TopTransactionResourceOwner);