Vejo que o PostgreSQL 17 introduziu um backup incremental que parece realmente ótimo! Eu estava pensando se ele poderia ser usado para restaurar um backup incremental.
Nosso caso de uso é que temos um único servidor de banco de dados. Atualmente, quando precisamos de tempo de inatividade, paramos nosso aplicativo, fazemos pg_dump no banco de dados primário, restauramos em um servidor secundário e, em seguida, reiniciamos nosso aplicativo apontado para o banco de dados secundário. Quando o tempo de inatividade é feito no servidor de banco de dados primário, fazemos o inverso. Isso agora normalmente leva cerca de 20 minutos entre o dump e a restauração e eu gostaria de minimizar isso ainda mais.
O que eu adoraria poder fazer é deixar o banco de dados rodando, despejar o banco de dados existente e restaurá-lo para o secundário. Então, parar o banco de dados, fazer um backup incremental e restaurá-lo, então trazer o secundário para cima.
Imagino que isso nos pouparia uma quantidade significativa de tempo de inatividade e manteria nossa configuração simples. Poderíamos considerar uma solução mais sofisticada usando replicação, mas isso parece mais complexo do que realmente precisamos.
Você deve usar replicação de streaming em vez de despejar e restaurar.
Quando você sabe que quer tempo de inatividade no servidor primário, configure um servidor standby de replicação de streaming no servidor secundário. Então, quando você estiver pronto para a troca, desligue o PostgreSQL no servidor primário e promova o standby no servidor secundário.
Se você fizer isso corretamente, a troca será questão de segundos.