J'ai besoin d'exécuter SQL à partir d'un fichier de commandes. J'exécute les étapes suivantes pour me connecter à Postgres et sélectionner les données du tableau
C:/pgsql/bin/psql -h %DB_Host% -p 5432 -U %DB_USER% -d %DB_NAME%
select * from test;
Je peux me connecter à la base de données, mais je reçois l'erreur
'select' n'est pas reconnu comme une commande interne ou externe, un programme utilisable ou un fichier de commandes.
Quelqu'un at-il fait face à un tel problème?
C’est l’une des requêtes que j’essaie, quelque chose de similaire fonctionne dans un script Shell (veuillez ignorer l’erreur de syntaxe dans la requête s’il en existe).
copy testdata (col1,col2,col3) from '%filepath%/%csv_file%' with csv;
Vous pouvez le diriger vers psql
(
echo select * from test;
) | C:/pgsql/bin/psql -h %DB_Host% -p 5432 -U %DB_USER% -d %DB_NAME%
Lorsque les parenthèses de fermeture font partie de la requête SQL, elles doivent être échappées avec trois carets.
(
echo insert into testconfig(testid,scenarioid,testname ^^^) values( 1,1,'asdf'^^^);
) | psql -h %DB_Host% -p 5432 -U %DB_USER% -d %DB_NAME%
Veuillez vous référer à la documentation
1] si vous transmettez le fichier avec le paramètre SQL utiliser -f
ou --file
2] si vous passez une commande individuelle, utilisez le paramètre -c
ou --command
Je suis d'accord avec Spidey:
1] si vous transmettez le fichier avec le paramètre sql use -f ou --file
Lorsque vous voulez exécuter plusieurs commandes, la meilleure façon de le faire est d’ajouter le paramètre -f, puis tapez simplement chemin de votre fichier sans marque "ou '(les chemins relatifs fonctionnent également):
psql -h %Host% -p 5432 -U %user% -d %dbname% -f ..\..\folder\Data.txt
Cela fonctionne également dans .NET Core. J'en ai besoin pour ajouter des données de base à ma base de données après les migrations.
Vous ne pouvez pas placer la requête sur une ligne séparée, l’interprète batch supposera qu’il s’agit d’une autre commande au lieu d’une requête pour psql. Je crois que vous devrez aussi le citer.
Utilisez le paramètre -f
pour passer le nom du fichier de commandes.
C:/pgsql/bin/psql -h %DB_Host% -p 5432 -U %DB_USER% -d %DB_NAME% -f 'sql_batch_file.sql'
http://www.postgresql.org/docs/current/static/app-psql.html
-f nom de fichier
--file = nom du fichier
Utilisez le fichier nomfichier comme source de commandes au lieu de les lire de manière interactive. Une fois le fichier traité, psql se termine. Ceci est à bien des égards équivalent à la méta-commande\i.
Si nomfichier est - (trait d'union), l'entrée standard est lue jusqu'à une indication EOF ou une méta-commande\q. Notez cependant que Readline n'est pas utilisé dans ce cas (comme si -n avait été spécifié).