AFAICT, base backups running on the replication protocol are always reported as "idle" in pg_stat_activity. This seems to have been an oversight in the "include walsender backends in pg_stat_activity" in 10, which does include it for walsenders in general, just not for the ones sending base backups. (and was then improved on later with the "include all non-standard backends" patch).
Unlike the regular walsender it also has to set it back to IDLE, since you can actually finish a base backup without disconnecting. PFA a patch that fixes this. I think this is bugfix-for-backpatch, I don't think it has a large risk of breaking things. Thoughts? Also, in setting this, there is no real way to differentiate between a regular walsender and a basebackup walsender, other than looking at the wait events. They're both listed as walsenders. Should there be? (That might not be as easily backpatchable, so keeping that as a separate one) -- Magnus Hagander Me: https://www.hagander.net/ <http://www.hagander.net/> Work: https://www.redpill-linpro.com/ <http://www.redpill-linpro.com/>
diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index 05ca95bac2..9fc031b141 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -697,6 +697,9 @@ SendBaseBackup(BaseBackupCmd *cmd) WalSndSetState(WALSNDSTATE_BACKUP); + /* Report to pgstat that this process is running */ + pgstat_report_activity(STATE_RUNNING, NULL); + if (update_process_title) { char activitymsg[50]; @@ -707,6 +710,8 @@ SendBaseBackup(BaseBackupCmd *cmd) } perform_base_backup(&opt); + + pgstat_report_activity(STATE_IDLE, NULL); } static void