web-dev-qa-db-fra.com

Exécuter un fichier .sql PostgreSQL en utilisant des arguments de ligne de commande

J'ai des fichiers .sql contenant des milliers d'instructions INSERT et j'ai besoin d'exécuter ces insertions sur ma base de données PostgreSQL afin de les ajouter à une table. Les fichiers sont si gros qu'il est impossible de les ouvrir et de copier les instructions INSERT dans une fenêtre de l'éditeur et de les y exécuter. J'ai trouvé sur Internet que vous pouvez utiliser les éléments suivants en accédant au dossier bin de votre installation PostgreSQL:

psql -d myDataBase -a -f myInsertFile

Dans mon cas:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

On me demande ensuite un mot de passe pour mon utilisateur, mais je ne peux rien entrer et quand j'appuie sur entrer, j'obtiens cette erreur:

psql: FATAL: échec de l'authentification du mot de passe pour l'utilisateur "myUsername"

Pourquoi est-ce que ça ne me laisse pas entrer un mot de passe? Existe-t-il un moyen de contourner ce problème, car il est essentiel que je puisse exécuter ces scripts?

J'ai contourné ce problème en ajoutant une nouvelle entrée dans mon fichier pg_hba.conf avec la structure suivante:

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

Le fichier pg_hba.conf se trouve généralement dans le dossier 'data' de votre installation PostgreSQL.

459
CSharpened

Vous avez quatre choix pour fournir un mot de passe:

  1. Définissez la variable d'environnement PGPASSWORD. Pour plus de détails, voir le manuel:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. Utilisez un fichier .pgpass pour stocker le mot de passe. Pour plus de détails, voir le manuel:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. Utilisez "authentification de confiance" pour cet utilisateur spécifique: http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. Depuis PostgreSQL 9.1, vous pouvez aussi tiliser une chaîne de connexion :
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING
130

Bien sûr, vous obtiendrez une erreur fatale lors de l'authentification, car vous n'incluez pas de nom d'utilisateur ...

Essayez celui-ci, ça va pour moi :)

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

Si la base de données est distante, utilisez la même commande avec Host

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

Vous devriez le faire comme ça:

\i path_to_sql_file

Voir:

Enter image description here

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

Utilisez-le pour exécuter des fichiers * .sql lorsque le serveur PostgreSQL est situé à un endroit différent:

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

Ensuite, vous êtes invité à entrer le mot de passe de l'utilisateur.

EDIT: mis à jour sur la base du commentaire fourni par @zwacky

31
GPrathap

Si vous êtes connecté à psql sur le shell Linux, la commande est la suivante:

\i fileName.sql

pour un chemin absolu et

\ir filename.sql

pour le chemin relatif à partir duquel vous avez appelé psql.

26
Florian

Via le terminal, connectez-vous à votre base de données et essayez ceci:

database-# >@pathof_mysqlfile.sql

ou

database-#>-i pathof_mysqlfile.sql

ou

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

Vous pouvez donner le nom d'utilisateur et le mot de passe sur la ligne de commande elle-même.

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

vous pouvez même le faire de cette façon:

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

Si vous disposez d'un accès Sudo sur une machine et que ce n'est pas recommandé pour les scripts de production uniquement pour le test sur votre propre machine, c'est la méthode la plus simple.

9
MDK

Expliquez comment exécuter un code SQL sur la ligne de commande pour PostgreSQL sous Linux:

Ouvrez un terminal et assurez-vous que vous pouvez exécuter la commande psql:

psql --version
which psql

Le mien est la version 9.1.6 située dans /bin/psql.

Créez un fichier texte brut appelé mysqlfile.sql

Éditez ce fichier, mettez une seule ligne dedans:

select * from mytable;

Exécutez cette commande en ligne de commande (en remplaçant votre nom d'utilisateur et le nom de votre base de données par pgadmin et kurz_prod):

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

Voici le résultat obtenu sur le terminal (je ne suis pas invité à entrer un mot de passe):

select * from mytable;

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

(2 rows)
7
Eric Leschinski

Vous pouvez ouvrir une invite de commande et l'exécuter en tant qu'administrateur. Puis tapez

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

Password for user postgres: apparaîtra.

Tapez votre mot de passe et entrez. Je ne pouvais pas voir le mot de passe que je tapais, mais cette fois quand j'ai appuyé sur entrée cela a fonctionné. En fait, je chargeais des données dans la base de données.

4
abeginner