diff -rpcd a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c *** a/src/backend/postmaster/autovacuum.c 2014-07-22 04:12:31.000000000 +0900 --- b/src/backend/postmaster/autovacuum.c 2014-07-29 17:56:47.000000000 +0900 *************** avl_sigusr2_handler(SIGNAL_ARGS) *** 1342,1347 **** --- 1342,1349 ---- { int save_errno = errno; + procsignal_sigusr2_handler(SIGUSR2); + got_SIGUSR2 = true; if (MyProc) SetLatch(&MyProc->procLatch); *************** AutoVacWorkerMain(int argc, char *argv[] *** 1496,1502 **** pqsignal(SIGPIPE, SIG_IGN); pqsignal(SIGUSR1, procsignal_sigusr1_handler); ! pqsignal(SIGUSR2, SIG_IGN); pqsignal(SIGFPE, FloatExceptionHandler); pqsignal(SIGCHLD, SIG_DFL); --- 1498,1504 ---- pqsignal(SIGPIPE, SIG_IGN); pqsignal(SIGUSR1, procsignal_sigusr1_handler); ! pqsignal(SIGUSR2, procsignal_sigusr2_handler); pqsignal(SIGFPE, FloatExceptionHandler); pqsignal(SIGCHLD, SIG_DFL); diff -rpcd a/src/backend/storage/ipc/procsignal.c b/src/backend/storage/ipc/procsignal.c *** a/src/backend/storage/ipc/procsignal.c 2014-07-22 04:12:31.000000000 +0900 --- b/src/backend/storage/ipc/procsignal.c 2014-07-29 17:56:47.000000000 +0900 *************** procsignal_sigusr1_handler(SIGNAL_ARGS) *** 258,263 **** --- 258,276 ---- { int save_errno = errno; + latch_sigusr1_handler(); + + errno = save_errno; + } + + /* + * procsignal_sigusr2_handler - handle SIGUSR2 signal. + */ + void + procsignal_sigusr2_handler(SIGNAL_ARGS) + { + int save_errno = errno; + if (CheckProcSignal(PROCSIG_CATCHUP_INTERRUPT)) HandleCatchupInterrupt(); *************** procsignal_sigusr1_handler(SIGNAL_ARGS) *** 282,288 **** if (CheckProcSignal(PROCSIG_RECOVERY_CONFLICT_BUFFERPIN)) RecoveryConflictInterrupt(PROCSIG_RECOVERY_CONFLICT_BUFFERPIN); - latch_sigusr1_handler(); - errno = save_errno; } --- 295,299 ---- diff -rpcd a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c *** a/src/backend/tcop/postgres.c 2014-07-22 04:12:31.000000000 +0900 --- b/src/backend/tcop/postgres.c 2014-07-29 17:56:47.000000000 +0900 *************** PostgresMain(int argc, char *argv[], *** 3624,3630 **** */ pqsignal(SIGPIPE, SIG_IGN); pqsignal(SIGUSR1, procsignal_sigusr1_handler); ! pqsignal(SIGUSR2, SIG_IGN); pqsignal(SIGFPE, FloatExceptionHandler); /* --- 3624,3630 ---- */ pqsignal(SIGPIPE, SIG_IGN); pqsignal(SIGUSR1, procsignal_sigusr1_handler); ! pqsignal(SIGUSR2, procsignal_sigusr2_handler); pqsignal(SIGFPE, FloatExceptionHandler); /* diff -rpcd a/src/include/storage/procsignal.h b/src/include/storage/procsignal.h *** a/src/include/storage/procsignal.h 2014-07-22 04:12:31.000000000 +0900 --- b/src/include/storage/procsignal.h 2014-07-29 17:56:47.000000000 +0900 *************** extern int SendProcSignal(pid_t pid, Pro *** 54,58 **** --- 54,59 ---- BackendId backendId); extern void procsignal_sigusr1_handler(SIGNAL_ARGS); + extern void procsignal_sigusr2_handler(SIGNAL_ARGS); #endif /* PROCSIGNAL_H */