]> granicus.if.org Git - postgresql/commitdiff
Fix possible failure to send final transaction counts to stats collector.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 7 Feb 2013 19:44:24 +0000 (14:44 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 7 Feb 2013 19:44:24 +0000 (14:44 -0500)
Normally, we suppress sending a tabstats message to the collector unless
there were some actual table stats to send.  However, during backend exit
we should force out the message if there are any transaction commit/abort
counts to send, else the session's last few commit/abort counts will never
get reported at all.  We had logic for this, but the short-circuit test
at the top of pgstat_report_stat() ignored the "force" flag, with the
consequence that session-ending transactions that touched no database-local
tables would not get counted.  Seems to be an oversight in my commit
641912b4d17fd214a5e5bae4e7bb9ddbc28b144b, which added the "force" flag.
That was back in 8.3, so back-patch to all supported versions.

src/backend/postmaster/pgstat.c

index 19b1f183166fedbac29317828be53ae2487fbd6e..cf9492ed3fa63464399cc0a3f50c3e7fcc6288e9 100644 (file)
@@ -675,8 +675,8 @@ pgstat_report_stat(bool force)
        int                     i;
 
        /* Don't expend a clock check if nothing to do */
-       if ((pgStatTabList == NULL || pgStatTabList->tsa_used == 0)
-               && !have_function_stats)
+       if ((pgStatTabList == NULL || pgStatTabList->tsa_used == 0) &&
+               !have_function_stats && !force)
                return;
 
        /*