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.
Vous avez quatre choix pour fournir un mot de passe:
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
Vous devriez le faire comme ça:
\i path_to_sql_file
Voir:
export PGPASSWORD=<password>
psql -h <Host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql
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
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.
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
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
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.
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)
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.