Temos um cluster de replicação do PostgreSQL 13 onde um dos standbys está configurado com recovery_min_apply_delay
="x hr", o que pode ser útil em caso de corrupção de dados.
Para um cenário em que uma exclusão acidental aconteceu no servidor mestre , mas ainda não foi aplicada ao servidor em espera . Neste caso, estou tentando extrair os dados do servidor em espera removendo o atraso de repetição do WAL e adicionando recovery_target_time
um ponto antes da exclusão acontecer.
Até este ponto, tive sucesso, mas depois que terminei de puxar os dados do servidor standby para o master (estou pensando em postgres_fdw), preciso retomar a replicação. Mas quando executo pg_wal_replay_resume()
, ele está criando uma nova linha do tempo e não está mais no cluster de replicação.
Existe alguma maneira de reproduzir o WAL além de usar recovery_target_time
?
Dando um exemplo do que estou tentando alcançar,
Digamos que recovery_min_apply_delay=2hr , uma exclusão acidental aconteceu às 03:50 AM, neste momento transações confirmadas em standby são transações que aconteceram em ou antes de 01:50 AM. Se eu esperar mais 2hr e às 05:49 AM se eu conseguir pausar a repetição do WAL em standby, poderei ver um instantâneo dos dados que estão "logo antes" de DELETE. Então usarei postgres_fdw para extrair dados do standby.
Como eu consigo "logo antes" de uma forma precisa e sistemática? Também seria capaz de retomar o replay do WAL.