I found that the normal exit (i.e., with exit code 0) of bgworker always leads to the immediate restart of bgworker whatever bgw_restart_time is. Is this intentional?
Not only crash but also normal exit should go along with bgw_restart_time?
bgw_restart_time corresponds to the time a bgworker is restarted in case of a crash only.
I'm now writing the bgworker which is allowed to be running only during recovery. After recovery ends, that bgworker is expected to exit with code 0. I was thinking to avoid the restart of the bgworker after normal exit, by using BGW_NEVER_RESTART.
This flag makes a worker not to restart only in case of a crash. To solve your problem, you could as well allow your process to restart and put it in indefinite sleep if server is not in recovery such it it will do nothing in your case.