Como importar arquivos * .sql existentes no PostgreSQL 8.4?

105

Estou usando o PostgreSQL 8.4 e tenho alguns arquivos * .sql para importar para um banco de dados. Como posso fazer isso?

Badr
fonte

Respostas:

142

Na linha de comando:

psql -f 1.sql
psql -f 2.sql

No psqlprompt:

\i 1.sql
\i 2.sql

Observe que pode ser necessário importar os arquivos em uma ordem específica (por exemplo: definição de dados antes da manipulação de dados). Se você possui um bashshell (GNU / Linux, Mac OS X, Cygwin) e os arquivos podem ser importados em ordem alfabética , você pode usar este comando:

for f in *.sql ; do psql -f $f ; done

Aqui está a documentação do psqlaplicativo (obrigado, Frank): http://www.postgresql.org/docs/current/static/app-psql.html

Bolo
fonte
@moon Talvez você não tenha direitos de acesso aos arquivos SQL? Em qual sistema operacional você está?
Bolo
@moon É a senha associada ao seu usuário PostgreSQL (o par de senha de usuário é armazenado no PostgreSQL).
Bolo
8
@moon Eu sugiro que você divida seu problema em três fases: 1) certifique-se de que você pode começar a psqlcorrer. 2) verifique se o usuário tem os privilégios de escrita necessárias, tais como: CREATE, INSERT, UPDATE, etc. 3) importar os arquivos SQL. Pelo que eu entendi, você está no estágio 1 agora.
Bolo
@Bolo: Você colocaria os três estágios na resposta?
AH
@Bolo, Como você mencionou, estou agora na terceira etapa. mas como posso importar o arquivo .sql da minha máquina local. Tentei \ i [caminho completo com extensão], mas recebo a mensagem de erro .sql sem esse arquivo ou diretório. Você poderia dar um exemplo.
75

na linha de comando, primeiro alcance o diretório onde o psql está presente e, em seguida, escreva os comandos como este:

psql [database name] [username]

e pressione enter psql pede a senha dê a senha do usuário:

então escreva

> \i [full path and file name with extension]

em seguida, pressione Enter inserção concluída.

Badr
fonte
Eu uso isso também. E funciona. Mas, eu mudo as instruções SQL fornecidas. Anteriormente, o * .sql existente não usava nenhum caractere; como o término de uma linha. E também devo remover o GO. Você acha que o script sql não é um script psql?
swdev
Tentei usar \ i [caminho completo com extensão], mas recebo a mensagem de erro .sql sem esse arquivo ou diretório. Você poderia carregar um exemplo. Obrigado.
Se \ i disser que esse arquivo não existe, então ele não encontrou um arquivo naquela posição. É melhor fornecer o URL absoluto. Para mim no Windows, esta linha de comando funcionou: \ i /tmp/robert/test.sql é claro que você deve ter comandos SQL válidos nesse arquivo.
shevy de
36

Bem, o caminho mais curto que conheço é o seguinte:

psql -U {user_name} -d {database_name} -f {file_path} -h {host_name}

database_name: em qual banco de dados você deve inserir os dados do arquivo.

file_path: caminho absoluto para o arquivo por meio do qual deseja realizar a importação.

host_name: o nome do host. Para fins de desenvolvimento, é principalmente localhost.

Ao inserir este comando no console, você será solicitado a inserir sua senha.

Arslan Ali
fonte
25

Tenha cuidado com "/" e "\". Mesmo no Windows, o comando deve estar no formato:

\i c:/1.sql
sofiane
fonte
1

Sempre preferível usar um arquivo de serviço de conexão (lookup / google 'arquivo de serviço de conexão psql')

Então simplesmente:

psql service={yourservicename} < {myfile.sql}

Onde yourservicenameé um nome de seção do arquivo de serviço.

Ted Rybicki
fonte