Tentando descobrir uma maneira adequada de limpar arquivos WAL antigos localizados no diretório de arquivamento para fins de recuperação pontual. Eu sei que posso usar o nome codificado do segmento WAL algo assim:
pg_archivecleanup.exe H:\Backup\pgArchive 0000000100000001000000C1
mas aparentemente eu gostaria de automatizar esse processo.
Obrigada.
Automatizar o processo é simples quando você sabe o que deseja excluir.
Posso te dar algumas dicas:
Normalmente, você deseja remover todos os arquivos WAL mais antigos que o backup de base mais antigo que deseja manter.
Sempre que um backup básico é feito, o PostgreSQL arquivará um arquivo chamado
*.backup
.Você pode usar esse arquivo como o segundo argumento
pg_archivecleanup
para remover tudo mais antigo que esse backup.Portanto, para reter os três últimos backups, você pode examinar todos os
*.backup
arquivos, classificá-los por tempo de modificação e encontrar o terceiro arquivo mais novo e usarpg_archivecleanup
com esse arquivo como segundo argumento.Você provavelmente deve usar uma solução enlatada, em vez de tentar criar a sua própria. No entanto, a única solução enlatada de código aberto que conheço que diz explicitamente que suporta o Windows é pg_probackup , que nunca usei.
Você diz que não pode perder mais de 15 minutos de trabalho. Portanto, sem uma solução de streaming, seu "archive_timeout" precisa ser inferior a 15 minutos. E seu archive_command precisa "fsync" (ou equivalente) os dados na extremidade remota, o que é difícil de fazer e é um ponto onde as soluções enlatadas podem realmente ajudar.
Mas é do outro lado da política do tempo que as coisas ficam mais difíceis, o que acho que vocês já sabem. Quando o segundo backup de base mais antigo tiver um mês de idade, você precisará excluir o backup de base mais antigo e todo o WAL que era necessário apenas para dar suporte a esse backup. A identificação da idade do segundo backup mais antigo provavelmente dependerá de qual convenção de nomenclatura você usa para eles, que fica a seu critério. E emparelhar esse backup básico com o arquivo .backup correspondente de maneira confiável também não é trivial. Então você pode ir pelo segundo arquivo .backup mais antigo, e olhando dentro dele você pode identificar o backup base correspondente a ele (assumindo que você configurou seu pg_basebackup corretamente -- que não é a configuração padrão). E então você já sabe qual arquivo alimentar para pg_archivecleanup, porque é com isso que você está começando.
E é claro que você precisa fazer backups básicos pelo menos uma vez por mês para começar, se quiser que isso funcione.