desenv-web-rp.com

Executar um arquivo .sql do PostgreSQL usando argumentos de linha de comando

Eu tenho alguns arquivos .sql com milhares de instruções INSERT neles e preciso executar essas inserções no meu banco de dados PostgreSQL, a fim de adicioná-los a uma tabela. Os arquivos são tão grandes que é impossível abri-los e copiar as instruções INSERT em uma janela do editor e executá-las lá. Eu encontrei na Internet que você pode usar o seguinte, navegando para a pasta bin da sua instalação do PostgreSQL:

psql -d myDataBase -a -f myInsertFile

No meu caso:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

Em seguida, peço uma senha para o meu usuário, mas não consigo digitar nada e, quando pressiono enter, recebo este erro:

psql: FATAL: autenticação de senha falhou para o usuário "myUsername"

Por que não me deixa digitar uma senha? Existe uma maneira de contornar isso, pois é fundamental que eu possa executar esses scripts?

Eu contornei esse problema adicionando uma nova entrada no meu arquivo pg_hba.conf com a seguinte estrutura:

# IPv6 local connections:
Host    myDbName    myUserName ::1/128    trust

O arquivo pg_hba.conf geralmente pode ser encontrado na pasta 'data' da sua instalação do PostgreSQL.

420
CSharpened

Você tem quatro opções para fornecer uma senha:

  1. Defina a variável de ambiente PGPASSWORD. Para mais detalhes, consulte o manual:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. Use um arquivo .pgpass para armazenar a senha. Para mais detalhes, consulte o manual:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. Use "autenticação de confiança" para esse usuário específico: http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. Desde o PostgreSQL 9.1 você também pode usar uma string de conexão :
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING
123
a_horse_with_no_name

Claro, você receberá um erro fatal para autenticar, porque você não inclui um nome de usuário ...

Tente este aqui, está tudo bem para mim :)

psql -U username -d myDataBase -a -f myInsertFile

Se o banco de dados for remoto, use o mesmo comando com o Host

psql -h Host -U username -d myDataBase -a -f myInsertFile
394
pmverma

Você deveria fazer assim:

\i path_to_sql_file

Vejo:

Enter image description here

237
Rachid Oussanaa
export PGPASSWORD=<password>
psql -h <Host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql
36
vishu9219

Use isto para executar arquivos * .sql quando o servidor PostgreSQL estiver localizado em um local diferente:

psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f /home/jobs/Desktop/resources/postgresql.sql

-h PostgreSQL server IP address
-d database name
-U user name
-p port which PostgreSQL server is listening on
-f path to SQL script
-a all echo
-q quiet 
-f file

Então você é solicitado a digitar a senha do usuário.

EDIT: atualizado com base no comentário fornecido por @zwacky

28
GPrathap

Através do terminal, acesse seu banco de dados e tente isto:

database-# >@pathof_mysqlfile.sql

ou

database-#>-i pathof_mysqlfile.sql

ou

database-#>-c pathof_mysqlfile.sql
24
Satish Sharma

Se você está logado no psql no shell do Linux, o comando é:

\i fileName.sql

por um caminho absoluto e

\ir filename.sql

para o caminho relativo de onde você chamou psql.

24
Florian

Você pode dar nome de usuário e PASSWORD na própria linha de comando.

   psql "dbname='urDbName' user='yourUserName' password='yourPasswd' Host='yourHost'" -f yourFileName.sql
12
Deepu Sahni

você poderia até fazer assim:

Sudo -u postgres psql -d myDataBase -a -f myInsertFile

Se você tem acesso Sudo na máquina e não é recomendado para scripts de produção apenas para teste em sua própria máquina, é a maneira mais fácil.

9
MDK

Percorra como executar um SQL na linha de comando do PostgreSQL no Linux:

Abra um terminal e verifique se você pode executar o comando psql:

psql --version
which psql

O meu é a versão 9.1.6 localizada em /bin/psql.

Crie um arquivo de texto simples chamado mysqlfile.sql

Edite esse arquivo, coloque uma única linha lá:

select * from mytable;

Execute este comando na linha de comando (substituindo seu nome de usuário e o nome do seu banco de dados por pgadmin e kurz_prod):

psql -U pgadmin -d kurz_prod -a -f mysqlfile.sql

O seguinte é o resultado que recebo no terminal (não me pedem uma senha):

select * from mytable;

test1
--------
hi
me too

(2 rows)
7
Eric Leschinski

Você pode abrir um prompt de comando e executar como administrador. Então digite

../bin>psql -f c:/...-h localhost -p 5432 -d databasename -U "postgres"

Password for user postgres: será exibido.

Digite sua senha e digite. Não consegui ver a senha que estava digitando, mas dessa vez quando pressione enter deu certo. Na verdade, eu estava carregando dados no banco de dados.

4
abeginner