Extraindo o despejo do PostgreSQL de uma maneira eficiente em disco

1

Eu tenho um dump PostgreSQL comprimido de 15 GB (como um pgbackup), que quando extraído é mais próximo de 60 GB. Eu tenho um servidor em nuvem com apenas 69 GB de espaço livre (54 GB após o pgbackup é copiado para a caixa), e eu queria saber se havia uma maneira astuta que eu poderia dividir o pgbackup em muitos pequenos arquivos compactados pgbbackup, excluir o pgbackup grande original e depois iterar sobre os pgbackups menores, descompactando, executando-os e excluindo-os, para que eu possa acabar com o conjunto de dados inteiro em um banco de dados PostgreSQL, dadas as restrições de disco.

    
por Noxville 11.03.2013 / 14:01

1 resposta

1

Aqui está um monte de soluções possíveis. Escolha uma que atenda às suas necessidades.

via stdin

A resposta é bem simples - use um pipe:

xzcat dumpFile.xz | pg_restore ....

Dessa forma, você não precisa de mais espaço em disco para extrair o arquivo de despejo compactado.

Veja man pg_restore :

-f filename, --file=filename

Specify output file for generated script, or for the listing when used with -l.

Default is the standard output.

via stdin e ssh

Se você tiver pouco espaço em disco para copiar o arquivo de despejo compactado para o servidor, use ssh para invocação:

xzcat dumpFile.xz |ssh -T user@dbserver pg_restore ... 

pg_restore via rede

Além disso, uma alternativa é reconfigurar seu banco de dados postgreSQL para permitir a conexão de sua estação de trabalho local. Nesse caso, você pode usar pg_restore em seu sistema local com a configuração PGHOST, PGPORT, PGUSER nos valores corretos.

dividindo o despejo

  1. Faça o download do despejo para uma máquina com espaço em disco suficiente.
  2. Usando o comando split (ou qualquer ferramenta semelhante) para reduzi-lo a partes menores.
  3. Remova o despejo do servidor de banco de dados.
  4. No servidor de banco de dados, crie um trabalho como esperar por receber arquivos parciais de despejo, por exemplo,

    while sleep 10
    do 
      if [ -r dumpPart ] 
      then 
        cat  dumpPart 
        echo "next part is loaded" >&2
        rm -f dumpPart
      fi
    done | pg_restore ....
    
  5. Etapa de upload para passo suas partes de despejo com o nome de destino dumpPart. Assegure-se de que a velocidade seja razoavelmente mais baixa que a declaração de sono acima.

por 11.03.2013 / 14:04