Usando o pg_dump com um número enorme de tabelas?

3

Estou lidando com um sistema de banco de dados que pode ter milhares de tabelas. O problema é que, quando tento fazer o backup usando pg_dump , às vezes recebo o seguinte erro:

pg_dump: WARNING:  out of shared memory
pg_dump: SQL command failed
pg_dump: Error message from server: ERROR:  out of shared memory
HINT:  You might need to increase max_locks_per_transaction.
pg_dump: The command was: LOCK TABLE public.foo IN ACCESS SHARE MODE

Eu poderia, claro, aumentar a configuração de max_locks_per_transaction . Mas o problema é que o número de tabelas pode variar. Eu não quero constantemente ter que revisitar essa configuração toda vez que houver uma falha (supondo que percebemos a falha, já que isso está em um cron job!).

Qual seria a melhor maneira de resolver esse problema? Atualmente, estou trabalhando em um script Perl que listará todas as tabelas e depois chamará pg_dump em "chunks" para manter um limite no número de bloqueios de tabela, mas aposto que poderia fazer melhor.

    
por Matt Solnit 19.08.2009 / 22:01

1 resposta

3

Se você quiser um backup consistente, você deve aumentar o max_locks_per_transaction.

Fazê-lo em partes de um script tornará o backup inconsistente se você tiver acesso simultâneo, o que provavelmente não é o que você deseja.

Sua outra opção é usar o PITR e fazer um backup em nível de sistema de arquivos. Isso não removerá nenhum bloqueio no banco de dados.

    
por 19.08.2009 / 22:23

Tags