Importar despejo SQL no banco de dados PostgreSQL


451

Estamos trocando de host e o antigo forneceu um dump SQL do banco de dados PostgreSQL do nosso site.

Agora, estou tentando configurar isso em um servidor WAMP local para testar isso.

O único problema é que não tenho idéia de como importar esse banco de dados no PostgreSQL 9 que configurei.

Eu tentei o pgAdmin III, mas não consigo encontrar uma função 'import'. Então, eu apenas abri o editor SQL e colei o conteúdo do dump lá e o executei, ele cria as tabelas, mas continua me dando erros quando tenta colocar os dados nele.

ERROR:  syntax error at or near "t"
LINE 474: t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view...

The lines:
COPY tb_abilities (active, creation, modtime, id, lang, title, description) FROM stdin;
t   2011-05-24 16:45:01.768633  2011-05-24 16:45:01.768633  view    nl ...  

Eu também tentei fazer isso com o prompt de comando, mas não consigo encontrar o comando necessário.

Se eu fizer

psql mydatabase < C:/database/db-backup.sql;

Eu recebo o erro

ERROR:  syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
        ^

Qual é a melhor maneira de importar o banco de dados?


Eu tinha um erro semelhante à sua primeira: ERROR: syntax error at or near "t". Aconteceu que eu havia importado apenas um esquema parcial e, portanto, uma CREATE TABLEdeclaração anterior no script falhou. Veja a saída completa da importação para encontrá-la.
Owensmartin

Respostas:


732
psql databasename < data_base_dump

Esse é o comando que você está procurando.

Cuidado: databasenamedeve ser criado antes da importação. Veja o Capítulo 23 do PostgreSQL Docs. Backup e restauração .


1
Eu tentei esse psql mydatabase <C: \ database \ db-backup.sql, mas recebo o erro Comando inválido \ database. Eu também tentei "" em volta dele.
dazz 27/07

23
@Dazz Você precisa executar este comando no prompt de comando (Iniciar -> Executar -> cmd), não no prompt do postgres.
27711 Jacob

2
se eu executá-lo a partir do cmd, recebo 'O operador' <'está reservado para uso futuro.'
dazz 27/07

3
@Dazz: Você poderia usar -fswitch (ou --file) também
Grzegorz Szpetkowski

47
psql --username = postgres nome do banco de dados <data_base_dump.sql
Maxence

356

Aqui está o comando que você está procurando.

psql -h hostname -d databasename -U username -f file.sql

29
Bom, mas é melhor acrescentar também o parâmetro "-L logfile.log" para registrar a saída no arquivo.
Zerologiko

2
get this "A entrada é um despejo de formato personalizado do PostgreSQL. Use o cliente de linha de comando pg_restore para restaurar esse despejo em um banco de dados."
Wajdan Ali 10/09/18

3
Você também pode:pg_restore -h hostname -d dbname -U username filename.sql
Fábio Araújo

114

Eu acredito que você deseja executar no psql:

\i C:/database/db-backup.sql

Tinha que usar isso porque o eshell do Emacs não suporta redirecionamento de entrada. Obrigado.
Duma

3
Certifique-se de alterar primeiro o banco de dados com \ c <database_name>
hkong

53

Isso funcionou para mim:

sudo -u postgres psql db_name < 'file_path'

49

Não tenho certeza se isso funciona para a situação do OP, mas descobri que executar o seguinte comando no console interativo era a solução mais flexível para mim:

\i 'path/to/file.sql'

Apenas verifique se você já está conectado ao banco de dados correto. Este comando executa todos os comandos SQL no arquivo especificado.


1
Esta solução funcionou para mim, enquanto a solução mais votada gerou um erro "stdin não é um tty".
김민준

Apenas o que eu estava procurando - uma maneira de executar o script de dentro da psqllinha de comando. Obrigado!
vatsug

Só queria agradecer por este. Deve ser incluído na resposta certa.
PKHunter

isso está correto, não use barras invertidas no caminho no windows!
precisa saber é o seguinte

também para Windows, você precisa de barras duplas para frente
CMAS

44

Funciona muito bem, na linha de comando, todos os argumentos são necessários, -W é para senha

psql -h localhost -U user -W -d database_name -f path/to/file.sql

22

Apenas por diversão, se o seu despejo estiver compactado, você poderá fazer algo como

gunzip -c filename.gz | psql dbname

Como Jacob mencionou, os documentos do PostgreSQL descrevem tudo isso muito bem.


7

Eu uso:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>

Espero que isso ajude alguém.


4

Você pode fazer isso no pgadmin3. Solte os esquemas que seu dump contém. Em seguida, clique com o botão direito do mouse no banco de dados e escolha Restaurar. Em seguida, você pode procurar o arquivo de despejo.


2
Mas o botão 'restore' não pode ser clicado, mesmo após a seleção do arquivo .sql. Este software parece querer algum outro tipo de arquivo - um com o formato * .backup. Clicar em 'ajuda' nessa caixa de importação refere-se a pg_restore - "... um utilitário para restaurar um banco de dados PostgreSQL a partir de um arquivo criado por pg_dump em um dos formatos de texto sem texto". O arquivo sql ao qual o OP se refere é um formato de texto sem formatação.
JosephK

4

verifique se o banco de dados para o qual você deseja importar foi criado, então você pode importar o dump com

sudo -u postgres -i psql testdatabase < db-structure.sql

Se você deseja substituir o banco de dados inteiro, primeiro largue o banco de dados

# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"

e depois recriá-lo com

sudo -u postgres -i psql -c "create database testdatabase;"

3

Notei que muitos exemplos são complicados demais para o host local, onde existem apenas usuários do postgres sem senha em muitos casos:

psql -d db_name -f dump.sql

2

Tentei muitas soluções diferentes para restaurar meu backup do postgres. Encontrei permissão negada para problemas no MacOS, nenhuma solução parecia funcionar.

Aqui está como eu consegui funcionar:

O Postgres vem com o Pgadmin4. Se você usa o macOS, pode pressionar CMD+ SPACEe digitar pgadmin4para executá-lo. Isso abrirá uma guia do navegador no chrome.

Se você encontrar erros ao fazer o pgadmin4 funcionar, tente killall pgAdmin4no seu terminal e tente novamente.


Etapas para obter o backup / restauração do pgadmin4 +

1. Crie o backup

Faça isso clicando com o botão direito do mouse no banco de dados -> "backup"

insira a descrição da imagem aqui

2. Dê um nome ao arquivo.

Like test12345. Clique em backup. Isso cria um despejo de arquivo binário, não está em um .sqlformato

insira a descrição da imagem aqui

3. Veja onde ele baixou

Deve haver um pop-up na parte inferior direita da tela. Clique na página "mais detalhes" para ver onde o seu backup foi baixado para

insira a descrição da imagem aqui

4. Encontre o local do arquivo baixado

Nesse caso, é /users/vincenttang

insira a descrição da imagem aqui

5. Restaure o backup do pgadmin

Supondo que você executou as etapas 1 a 4 corretamente, você terá um arquivo binário de restauração. Pode chegar um momento em que seu colega de trabalho deseje usar o arquivo de restauração na máquina local. Essa pessoa foi ao pgadmin e restaurou

Faça isso clicando com o botão direito do mouse no banco de dados -> "restore"

insira a descrição da imagem aqui

6. Selecione um localizador de arquivos

Certifique-se de selecionar o local do arquivo manualmente, NÃO arraste e solte um arquivo nos campos do remetente no pgadmin. Porque você terá permissões de erro. Em vez disso, encontre o arquivo que você acabou de criar:

insira a descrição da imagem aqui

7. Encontre o arquivo

Pode ser necessário alterar o filtro na parte inferior direita para "Todos os arquivos". Localize o arquivo depois, a partir da etapa 4. Agora pressione o botão "Selecionar" abaixo para confirmar

insira a descrição da imagem aqui

8. Restaure o arquivo

Você verá esta página novamente, com o local do arquivo selecionado. Vá em frente e restaure

insira a descrição da imagem aqui

9. Sucesso

Se tudo estiver bom, o canto inferior direito deve exibir um indicador mostrando uma restauração bem-sucedida. Você pode navegar até suas tabelas para ver se os dados foram restaurados em cada tabela.

10. Se não foi bem sucedido:

Se a etapa 9 falhar, tente excluir seu esquema público antigo no banco de dados. Vá para "Ferramenta de consulta"

insira a descrição da imagem aqui

Execute este bloco de código:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

insira a descrição da imagem aqui

Agora tente as etapas 5 a 9 novamente, deve funcionar

Sumário

Foi assim que tive que fazer backup / restaurar meu backup no Postgres, quando tive problemas de permissão de erro e não consegui efetuar login como superusuário. Ou defina credenciais para leitura / gravação usando chmodpara pastas. Esse fluxo de trabalho funciona para um padrão de despejo de arquivo binário "Custom" do pgadmin. Suponho que .sqlseja da mesma maneira, mas ainda não testei isso

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.