Estou executando um pg_dump do meu banco de dados postgres 9.4 e, ocasionalmente, ocorrerá um erro se algum outro processo tiver um bloqueio exclusivo em uma tabela. Existe uma maneira de o pg_dump simplesmente ignorar essa tabela e prosseguir com o restante do banco de dados em vez de apenas parar em suas trilhas?
relate perguntas
-
Posso ativar o PITR depois que o banco de dados foi usado
-
Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo
-
Os procedimentos armazenados impedem a injeção de SQL?
-
Sequências Biológicas do UniProt no PostgreSQL
-
Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?
Essa funcionalidade está faltando no pg_dump e a solução certa seria aprimorá-la adicionando um sinalizador com algo como
--ignore-errors
, os comentários não percebem que fazer backup de algumas tabelas é melhor do que nada. Em um cenário em que você deseja restaurar apenas algumas tabelas, isso seria útil.Existem algumas opções com as quais você pode implementar uma solução alternativa:
Use o parâmetro abaixo para reduzir o tempo limite para 10 segundos, registrar a tabela e excluir dinamicamente essa tabela de um novo comando pg_dump.
--lock-wait-timeout=timeout
--exclude-table=table
Se você tiver um banco de dados em espera, use-o para fazer seus backups e terá menos chances de esse problema acontecer.
Se o problema for devido a algumas tabelas de estágio não registradas, você pode usar o parâmetro abaixo para ignorá-las (eu não testei isso, então não tenho 100% de certeza)
--no-unlogged-table-data
Escreva um script wrapper e faça backup de cada esquema ou tabela, desta forma, se a falha acontecer, você perderá um esquema ou tabela, você terá que implementar um wrapper semelhante para restauração, pois fazê-lo manualmente seria problemático, também isso não ser consistente em um nível de banco de dados.