Pular para o conteúdo

Problemas com campos maiores que 300MB no pg_dump

Dica publicada em Linux / Introdução
Alexandre aleaugustoplus
Hits: 9.570 Categoria: Linux Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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

Montar pastas via SSH Linux

TexLive - Latex em qualquer lugar!

Adicionar botão "mostrar área de trabalho" no Zorin OS

Migre sem problemas para o software livre

Configurando e trocando IP na platafoma Solaris

O comando rm

#1 Comentário enviado por rony_souza em 03/10/2010 - 21:09h
Boa dica...

(:

Contribuir com comentário

Entre na sua conta para comentar.