Problemas com campos maiores que 300MB no pg_dump

Publicado por Alexandre em 22/09/2010

[ Hits: 8.724 ]

 


Problemas com campos maiores que 300MB no pg_dump



Venho desenvolvendo diversos projetos que integram o Postgres (8.3, 8.4) como solução de SGBD, solução que sempre atendeu as expectativas dos nossos projetos, de todos os pontos de vistas esperados de um SGBD.

Capacidades do pg_dump:
  • Tamanho máximo de um banco: Ilimitado
  • Tamanho máximo de uma tabela: 64TB
  • Tamanho máximo de um registro: Ilimitado
  • Tamanho máximo de um campo: 1GB
  • Máximo de linhas numa tabela: Ilimitado
  • Máximo de colunas numa tabela: 1600
  • Máximo de índices numa tabela: Ilimitado

Venho relatar um problema no pg_dump. Como podem ver neste trecho retirado da documentação do Postgres, o tamanho máximo de um campo é de 1GB, em testes o banco de dados realmente suportou! Porém se você tiver um campo acima de 300MB, muito provavelmente não conseguirá fazer o backup desta tabela do seu banco de dados, pois inexplicavelmente o pg_dump aloca uma quantidade muito grande de memória para fazer um backup de um registro deste tamanho.

Segue a mensagem de erro apresentada para o seguinte comando de backup:

# /usr/bin/pg_dump -d -D -F c --disable-triggers --verbose -f "/backup/arquivo.bkp"
pg_dump: saving database definition
pg_dump: SQL command failed
pg_dump: Error message from server: ERRO: invalid memory alloc request size 1353567981
pg_dump: The command was: FETCH 100 FROM _pg_dump_cursor
pg_dump: *** aborted because of error

Embora o erro não informe a unidade em que está o número considerando que esteja em bytes, isto estaria próximo de 1.3G, que é uma quantidade aceitável de memória em se tratando de servidores. O que posso inferir é que este número não está em bytes, pois o servidor que estava realizando esta rotina estava com 8G de memória RAM mais 8G de swap, que no momento do backup estava com 0% de utilização.

Conclusão

Se quiser fazer backup de seu banco de dados postgres com pg_dump, não tenha registros maiores que 300MB em seu banco.

Outra observação quanto ao uso do pg_dump é o fato dele não dividir o processamento do backup concorrentemente.

Em servidores com 8 processadores a aplicação roda 100% apenas em 1, enquanto os outros 7 ficam ociosos e os discos ociosos também, devido a demora do processamento. A solução neste caso pode ser fazer manualmente o backup de cada tabela separadamente.

Outras dicas deste autor

Montar pastas via SSH Linux

Criação de 1° super usuário no PostgreSQL

Leitura recomendada

Criando e apagando usuários do sistema Linux

Distribuições de Linux existentes

APT-GET: Resolvendo problemas com chave pública

Somar dias úteis em data - PHP

Tecla Super (tecla Windows) para todos os logins no modo gráfico

  

Comentários
[1] Comentário enviado por rony_souza em 03/10/2010 - 21:09h

Boa dica...

(:



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts