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 volumineux qu'il est impossible de les ouvrir et de copier les instructions INSERT dans une fenêtre d'é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 je tape sur Entrée, j'obtiens cette erreur:
psql: FATAL: l'authentification par mot de passe a échoué pour l'utilisateur "myUsername"
Pourquoi ne me laisse-t-il pas entrer un mot de passe? Y a-t-il un moyen de contourner cela 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.
la source
Réponses:
Vous avez quatre choix pour fournir un mot de passe:
http://www.postgresql.org/docs/current/static/libpq-envars.html
http://www.postgresql.org/docs/current/static/libpq-pgpass.html
https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING
la source
-u
paramètre commeBien sûr, vous obtiendrez une erreur fatale pour l'authentification, car vous n'incluez pas de nom d'utilisateur ...
Essayez celui-ci, c'est OK pour moi :)
Si la base de données est distante, utilisez la même commande avec l'hôte
la source
-a
param?-a
n'est pas nécessaire ici. C'est "Imprimer toutes les lignes d'entrée non vides sur la sortie standard au fur et à mesure de leur lecture"Vous devez le faire comme ceci:
Voir:
la source
Permission denied
chmod 777 myfile
erreur aPermission denied
été corrigéUtilisez-le pour exécuter des fichiers * .sql lorsque le serveur PostgreSQL se trouve à un endroit différent:
Vous êtes ensuite invité à saisir le mot de passe de l'utilisateur.
EDIT: mis à jour sur la base du commentaire fourni par @zwacky
la source
-a
: tous les échos ,:-q
silencieux-f
la source
Si vous êtes connecté à psql sur le shell Linux, la commande est:
pour un chemin absolu et
pour le chemin relatif d'où vous avez appelé psql.
la source
Via le terminal, connectez-vous à votre base de données et essayez ceci:
ou
ou
la source
Vous pouvez donner à la fois le nom d'utilisateur et le MOT DE PASSE sur la ligne de commande elle-même.
la source
vous pouvez même le faire de cette façon:
Si vous avez
sudo
accès à la machine et qu'il n'est pas recommandé pour les scripts de production juste pour le test sur votre propre machine, c'est la manière la plus simple.la source
Découvrez comment exécuter un SQL sur la ligne de commande pour PostgreSQL sous Linux:
Ouvrez un terminal et assurez-vous que vous pouvez exécuter la
psql
commande:Le mien est la version 9.1.6 située dans
/bin/psql
.Créez un fichier texte simple appelé
mysqlfile.sql
Modifiez ce fichier, mettez une seule ligne dedans:
Exécutez cette commande sur la ligne de commande (en substituant votre nom d'utilisateur et le nom de votre base de données à pgadmin et kurz_prod):
Voici le résultat que j'obtiens sur le terminal (je ne suis pas invité à entrer un mot de passe):
la source
Vous pouvez ouvrir une invite de commande et exécuter en tant qu'administrateur. Tapez ensuite
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, lorsque j'appuie sur Entrée, cela a fonctionné. En fait, je chargeais des données dans la base de données.
la source
-d "postgres"
-d
pour le nom de la base de données, vérifiezpsql --help
J'ai réussi à écrire (situé dans le répertoire où se trouve mon script)
où
-u user
est le rôle qui possède la base de données où je veux exécuter le script, puis le sepsql
connecte à lapsql
console après cela-d my_database
me chargemydatabase
enfin-a -f file.sql
où-a
font écho toutes les entrées du script et-f
exécutent les commandes defile.sql
dansmydatabase
, puis quittent.J'utilise: psql (PostgreSQL) 10.12 sur (Ubuntu 10.12-0ubuntu0.18.04.1)
la source