Restaurar um arquivo de backup do postgres usando a linha de comando?

294

Eu sou novo no postgresql e localmente, uso o pgadmin3. No servidor remoto, no entanto, não tenho esse luxo.

Eu já criei o backup do banco de dados e o copiei, mas existe uma maneira de restaurar um backup na linha de comando? Eu só vejo coisas relacionadas à GUI ou ao pg_dumps, portanto, se alguém puder me dizer como fazer isso, seria ótimo!

TwixxyKit
fonte

Respostas:

365

Existem duas ferramentas para analisar, dependendo de como você criou o arquivo de despejo.

Sua primeira fonte de referência deve ser a página de manual, pg_dump(1)pois é isso que cria o próprio dump. Diz:

Os dumps podem ser gerados em formatos de script ou arquivo morto. Os dumps de script são arquivos de texto sem formatação que contêm os comandos SQL necessários para reconstruir o banco de dados para o estado em que estava no momento em que foi salvo. Para restaurar a partir de um script desse tipo, alimente-o no psql (1). Os arquivos de script podem ser usados ​​para reconstruir o banco de dados, mesmo em outras máquinas e outras arquiteturas; com algumas modificações, mesmo em outros produtos de banco de dados SQL.

Os formatos alternativos de arquivo morto devem ser usados ​​com pg_restore (1) para reconstruir o banco de dados. Eles permitem que o pg_restore seja seletivo sobre o que é restaurado ou mesmo reordene os itens antes de serem restaurados. Os formatos de arquivo morto são projetados para serem portáteis nas arquiteturas.

Depende da maneira como foi despejado. Provavelmente, você pode descobrir isso usando o file(1)comando excelente - se ele mencionar texto ASCII e / ou SQL, ele deve ser restaurado, psqlcaso contrário você provavelmente deve usarpg_restore

Restaurar é bem fácil:

psql -U username -d dbname < filename.sql

-- For Postgres versions 9.0 or earlier
psql -U username -d dbname -1 -f filename.sql

ou

pg_restore -U username -d dbname -1 filename.dump

Confira as respectivas páginas de manual - há algumas opções que afetam o funcionamento da restauração. Pode ser necessário limpar seus bancos de dados "ativos" ou recriá-los a partir do template0 (conforme indicado em um comentário) antes de restaurar, dependendo de como os dumps foram gerados.

Steven Schlansker
fonte
3
IME que você quase sempre deseja restaurar em um banco de dados que foi criado recentemente a partir do template0. Caso contrário, se você tiver feito algo como ativar o plpgsql no template1, o processo de restauração tentará fazê-lo novamente, e a opção -1 que você sugere significa que toda a transação falhará. Então, algo como "createdb -T template0 seo2" seguido de "pg_restore -v -d seo2 seo.pg" para restaurar o seo.pg (criado a partir do banco de dados seo) em um novo banco de dados seo2. Se o seu arquivo de backup é apenas um arquivo .sql, você pode aparar pedaços conflitantes manualmente.
Araqnid
61
Você não pode ter -de -fao mesmo tempo. pg_restore: options -d/--dbname and -f/--file cannot be used together
CppLearner
8
Na versão 9.2, a opção "-f" especifica um arquivo de saída, não o arquivo de despejo (e provavelmente significa o mesmo nas versões anteriores).
precisa
4
Em relação a cannot be used together, veja aqui: stackoverflow.com/questions/27882070/…
Abdull 23/16
3
@ Alex78191 significa que ele é executado como uma única transação, que pode falhar completamente e reverter ou passar. Ele também bloqueará algum acesso ao banco de dados.
ATN
216

criar backup

pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f 
"/usr/local/backup/10.70.0.61.backup" old_db

-F c é um formato personalizado (compactado e capaz de executar paralelamente a -j N) -b inclui blobs, -v é detalhado, -f é o nome do arquivo de backup

restaurar do backup

pg_restore -h localhost -p 5432 -U postgres -d old_db -v 
"/usr/local/backup/10.70.0.61.backup"

importante definir -h localhost - opção

piloto
fonte
2
Eu gostaria de mencionar que antes de executar esses comandos, você deve estar localizado na pasta bin do Posgresql . Por exemplo, no Windows (se você o instalou na pasta padrão), seria C: \ Arquivos de Programas \ PostgreSQL \ 9.6 \ bin
juan_carlos_yl
90

Pode ser necessário fazer o login postgrespara ter privilégios totais nos bancos de dados.

su - postgres
psql -l                      # will list all databases on Postgres cluster

pg_dump / pg_restore

  pg_dump -U username -f backup.dump database_name -Fc 

switch -Fespecifique o formato do arquivo de backup:

  • c usará o formato PostgreSQL personalizado, compactado e resultando no menor tamanho de arquivo de backup
  • d para o diretório em que cada arquivo é uma tabela
  • t para arquivo TAR (maior que o formato personalizado)
  • -h/ --hostEspecifica o nome do host da máquina na qual o servidor está executando
  • -W/ --passwordForce pg_dumpa solicitar uma senha antes de conectar-se a um banco de dados

restaurar backup:

   pg_restore -d database_name -U username -C backup.dump

O parâmetro -Cdeve criar o banco de dados antes de importar os dados. Se não funcionar, você sempre pode criar um banco de dados, por exemplo. com comando (como usuário postgresou outra conta que possui direitos para criar bancos de dados)createdb db_name -O owner

pg_dump / psql

Caso você não tenha especificado o argumento, -Fo formato SQL de texto sem formatação padrão foi usado (ou com -F p). Então você não pode usarpg_restore . Você pode importar dados com psql.

cópia de segurança:

pg_dump -U username -f backup.sql database_name

restaurar:

psql -d database_name -f backup.sql
Tombart
fonte
Usei o comando "psql -d database_name -f backup.sql" para restaurar um banco de dados que despejei do dokku no DigitalOcean. Trabalhou muito bem.
NineBlindEyes
1
enquanto estiver usando o psql se seu usuário (por exemplo postgres) tiver uma senha definida, a -Wopção deverá ser usada. Por exemplo, no Ubuntu, sem fazer su postgresnada do terminal, $ psql -h localhost -U postgres -W -d DB_NAME < DB_BACKUP.sqlé o comando que funcionou para mim para restaurar meu backup no meu host local. Observe que a -hopção é necessária.
Jignesh Gohel 19/09/18
@JiggneshhGohel Como o manual diz: a -Wopção nunca é essencial. pg_dumpsolicitará automaticamente uma senha se o servidor exigir autenticação por senha. Além disso, você pode usar a PGPASSWORDvariável env, se estiver usando senhas em texto sem formatação. -hserá necessário se o padrão PGHOSTnão for aplicável. Essas opções são comuns para muitos utilitários do PostgreSQL, portanto, não são essenciais para responder a essa pergunta (depende muito da sua configuração).
Tombart 20/09/18
@ Tombart sua segunda pg_dump/psqlparte opção é o trabalho para mim. mas a 1ª parte pg_dump/pg_restorenão funciona para mim para restauração. Obrigado.
Anjan Biswas 30/01/19
@AnjanBiswas A primeira opção é usar o arquivo compactado, que precisará de mais CPUs, mas o arquivo de backup ocupará menos espaço no disco. Você só precisa escolher a compactação apropriada, por exemplo,-Fc
Tombart
60

POSTGRESQL 9.1.12

DUMP:

pg_dump -U user db_name > archive_name.sql

coloque a senha do usuário e pressione enter.

RESTAURAR:

psql -U user db_name < /directory/archive.sql

coloque a senha do usuário e pressione enter.

Natan Medeiros
fonte
31

Abaixo está minha versão da pg_dumpqual eu uso para restaurar o banco de dados:

pg_restore -h localhost -p 5432 -U postgres -d my_new_database my_old_database.backup

ou use psql:

psql -h localhost -U postgres -p 5432 my_new_database < my_old_database.backup

onde -hhost, -pporta, -unome de usuário de login, -dnome do banco de dados

Yahor M
fonte
2
Govind Singh, por que você editou minha resposta? suas alterações não trazem nada de novo ..
Yahor M 24/11
1
my_new_databasejá deveria existir ao usar psql, não?
Elmex80s
22

Backup e restauração com GZIP

Para bancos de dados de tamanho maior, isso é muito bom

cópia de segurança

pg_dump -U user -d mydb | gzip > mydb.pgsql.gz

restaurar

gunzip -c mydb.pgsql.gz | psql dbname -U user

https://www.postgresql.org/docs/9.1/static/backup-dump.html

Sarath Ak
fonte
1
Para o ubuntu, você pode usar: gunzip -c mydb.pgsql.gz | sudo -u postgres psqlPara obter as permissões para operar no banco de dados. Considere também o --cleansinalizador ao despejar, que limpará todos os dados existentes, pode ser útil.
Sebastian
Trabalhando ótima e pura solução para mim. Obrigado!
Nam G VU
11
Backup:  $ pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}

Restore: $ psql -U {user-name} -d {desintation_db} -f {dumpfilename.sql}
Aaron Lelevier
fonte
8

Isso funcionou para mim:

pg_restore --verbose --clean --no-acl --no-owner --host=localhost --dbname=db_name --username=username latest.dump
Franz
fonte
Obrigado, --no-ownerrealmente me ajudou.
bonafernando
7

1.abre o terminal.

2. faça backup do seu banco de dados com o seguinte comando

seu bin do postgres - /opt/PostgreSQL/9.1/bin/

seu servidor de banco de dados de origem - 192.168.1.111

o local e o nome do arquivo de backup - /home/dinesh/db/mydb.backup

seu nome de banco de dados de origem - mydatabase

/opt/PostgreSQL/9.1/bin/pg_dump --host '192.168.1.111' --port 5432 --username "postgres" --no-password --format custom --blobs --file "/ home / dinesh / db /mydb.backup "" mydatabase "

3. restaure o arquivo mydb.backup no destino.

seu servidor de destino - localhost

o nome do banco de dados de destino - mydatabase

crie um banco de dados para restaurar o backup.

/opt/PostgreSQL/9.1/bin/psql -h 'localhost' -p 5432 -U postgres -c "CREATE DATABASE mydatabase"

restaurar o backup.

/opt/PostgreSQL/9.1/bin/pg_restore --host 'localhost' --port 5432 --username "postgres" --dbname "mydatabase" - no-password --clean "/ home / dinesh / db / mydb. cópia de segurança"

Dinesh-SriLanka
fonte
4

Se você criar um backup usando o pg_dump, poderá restaurá-lo facilmente da seguinte maneira:

  1. Abrir janela da linha de comando
  2. Vá para a pasta bin do Postgres. Por exemplo: cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. Digite o comando para restaurar seu banco de dados. For example: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql
  4. Digite a senha para o seu usuário do postgres
  5. Verifique o processo de restauração

fonte
4

1) Abra o terminal psql.

2) Descompacte / descompacte o arquivo de despejo.

3) Crie um banco de dados vazio.

4) use o seguinte comando para restaurar o arquivo .dump

<database_name>-# \i <path_to_.dump_file>
Vaibhav Desai
fonte
4

tente isto:

psql -U <username> -d <dbname> -f <filename>.sql

Restaurar psql do banco de dados a partir do arquivo .sql

Faysal Maqsood
fonte
psql -U <username> -d <dbname> -f <filename> .sql
Faysal Maqsood
3

experimentar:

pg_restore -h localhost -p 5432 -U <username> -d <dbname> -1 <filename>
Cristhian Gonzalez
fonte
2

A restauração de um arquivo de backup do postgres depende de como você fez o backup em primeiro lugar.

Se você usou pg_dump com -F c ou -F d, precisará usar pg_restore, caso contrário, poderá usar

psql -h localhost -p 5432 -U postgres <arquivo de backup

9 maneiras de fazer backup e restaurar bancos de dados postgres

Prashant Kumar
fonte
Você percebe que perdeu a parte do nome do banco de dados e ela reclamará da inexistência do banco de dados de destino?
Pere
2

Tente ver se os seguintes comandos podem ajudá-lo:

sudo su - yourdbuser
psql
\i yourbackupfile
Mehmet Ali
fonte
2

Desculpe pelo necropost, mas essas soluções não funcionaram para mim. Estou no postgres 10. No Linux:

  1. Eu tive que mudar o diretório para o meu pg_hba.conf.
  2. Eu tive que editar o arquivo para alterar o método de ponto para md5, conforme indicado aqui
  3. Reinicie o serviço: service postgresql-10 restart
  4. Mude o diretório para onde meu backup.sql estava localizado e execute:
    psql postgres -d database_name -1 -f backup.sql

    -database_name é o nome do meu banco de dados

    -backup.sql é o nome do meu arquivo de backup .sql.

Tim
fonte
1

Eu estava tendo problemas de autenticação ao executar o pg_dump, então mudei meu arquivo de despejo

mv database_dump /tmp

no diretório temporário e, em seguida, executei

su -u postgres
cd /tmp
pg_restore database_dump

Se você possui um grande dump de banco de dados, pode apenas criar outro diretório no qual o usuário atual e o usuário do postgres possam acessar e colocar o arquivo de dump do banco de dados nele.

user1876508
fonte
1

Se você tiver um arquivo SQL de backup, poderá restaurá-lo facilmente. Basta seguir as instruções fornecidas abaixo

1. At first, create a database using pgAdmin or whatever you want (for example my_db is our created db name)
2. Now Open command line window
3. Go to Postgres bin folder. For example:  cd "C:\ProgramFiles\PostgreSQL\pg10\bin"
4. Enter the following command to restore your database: psql.exe -U postgres -d my_db -f D:\Backup\backup_file_name.sql 

Digite a senha para o usuário do postgres, se necessário, e deixe o Postgres fazer seu trabalho. Então você pode verificar o processo de restauração.

Omar
fonte
0

Se você deseja fazer backup de seus dados ou restaurar dados de um backup, você pode executar os seguintes comandos:

  1. Para criar backup dos seus dados, vá para o diretório postgres \ bin \ C:\programfiles\postgres\10\bin\e digite o seguinte comando:

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup
  2. Para restaurar dados de um backup, vá para o diretório postgres \ bin \ C:\programfiles\postgres\10\bin\e digite o comando abaixo:

    C:\programFiles\postgres\10\bin> pg_restore -Fc -U ngb -d ngb -p 5432 <C:\ngb.130918.backup

    Verifique se o arquivo de backup existe.

Girjesh Kumar Suryawanshi
fonte
-3

Veja abaixo o exemplo de seu funcionamento

C: / Arquivos de Programas / PostgreSQL / 9.4 / bin \ pg_restore.exe --host localhost --port 5432 --username "postgres" --dbname "newDatabase" --no-password --verbose

" C: \ Usuários \ Yogesh \ Downloads \ novo Download \ DB.backup "

user3881346
fonte