Exécutez des requêtes PostgreSQL à partir de la ligne de commande

279

J'ai inséré une donnée dans une table .... Je veux voir maintenant une table entière avec des lignes et des colonnes et des données. Comment puis-je l'afficher via la commande?

Manu Lakaster
la source

Réponses:

476

psql -U username -d mydatabase -c 'SELECT * FROM mytable'

Si vous débutez avec postgresql et que vous n'êtes pas familier avec l'utilisation de l'outil de ligne de commande, psqlvous devez être conscient du comportement déroutant lorsque vous avez ouvert une session interactive.

Par exemple, lancez une session interactive:

psql -U username mydatabase 
mydatabase=#

À ce stade, vous pouvez saisir directement une requête, mais vous devez vous rappeler de terminer la requête par un point-virgule;

Par exemple:

mydatabase=# SELECT * FROM mytable;

Si vous oubliez le point-virgule, lorsque vous appuyez sur Entrée, vous n'obtiendrez rien sur votre ligne de retour, car psqlvous supposerez que vous n'avez pas terminé de saisir votre requête. Cela peut entraîner toutes sortes de confusion. Par exemple, si vous ressaisissez la même requête, vous devrez très probablement créer une erreur de syntaxe.

À titre expérimental, essayez de taper n'importe quel brouillage souhaité à l'invite psql, puis appuyez sur Entrée. psqlvous fournira en silence une nouvelle ligne. Si vous entrez un point-virgule sur cette nouvelle ligne, puis appuyez sur Entrée, vous recevrez l'ERREUR:

mydatabase=# asdfs 
mydatabase=# ;  
ERROR:  syntax error at or near "asdfs"
LINE 1: asdfs
    ^

La règle générale est la suivante: si vous n'avez reçu aucune réponse de psqlmais que vous vous attendiez à au moins QUELQUE CHOSE, vous avez oublié le point-virgule;

Subvention
la source
4
Depuis au moins 7.2 (c'est aussi loin que j'ai pris la peine de vérifier, cela pourrait être encore plus tôt), psql a eu l'option --single-line(ou -s) qui rend chaque commande immédiate sans avoir besoin d'ajouter un point-virgule.
Gordon
3
J'ai passé une heure à déboguer et le problème était le point-virgule manquant. MERCI
Dawson B
106
SELECT * FROM my_table;

my_tableest le nom de votre table.

ÉDITER:

psql -c "SELECT * FROM my_table"

ou tout simplement psqlpuis tapez vos requêtes.

Paul Draper
la source
7
psql -U username -c your_database "SELECT * FROM my_table"
DrColossos
3
comme dit, vous devez terminer votre commande par un point-virgule ; si vous êtes sur un système Windows, consultez notws pour les utilisateurs de Windows , insérez-le simplement cmd.exe /c chcp 1252après avoir ouvert l'invite de la console.
D_Guidi
2
pour les futurs utilisateurs, assurez-vous d'ajouter le -d avant le nom de votre base de données et -c avant la requête: psql -U nom d'utilisateur -d mydatabase -c 'SELECT * FROM mytable'
jmhead
2
n'a pas fonctionné pour moi psql: FATAL: database "SELECT * FROM tb_name" does not exist
.J'ai
Comme l'a indiqué @DrColossos, il semble que des guillemets autour de la commande soient nécessaires dans les environnements Windows cli / batch au moins.
jewbix.cube
43

Si votre base de données est protégée par mot de passe, la solution serait:

PGPASSWORD=password  psql -U username -d dbname -c "select * from my_table"
pyAddict
la source
3
Je ne sais jamais peut fournir un mot de passe de cette façon. C'est vraiment pratique pour faire un test. Merci
zhihong
21

Ouvrez "SQL Shell (psql)" à partir de vos applications (Mac).

entrez la description de l'image ici

Cliquez sur Entrée pour les paramètres par défaut. Entrez le mot de passe lorsque vous y êtes invité.

entrez la description de l'image ici

*) Type \?d'aide

*) Tapez \conninfopour voir sous quel utilisateur vous êtes connecté.

*) Tapez \lpour voir la liste des bases de données.

entrez la description de l'image ici

*) Connectez-vous à une base de données par \c <Name of DB>exemple\c GeneDB1

entrez la description de l'image ici

Vous devriez voir la modification de l'invite de clé dans la nouvelle base de données, comme suit: entrez la description de l'image ici

*) Maintenant que vous êtes dans une base de données donnée, vous voulez connaître les schémas de cette base de données. La meilleure commande pour ce faire est \dn.

entrez la description de l'image ici

D'autres commandes qui fonctionnent également (mais pas aussi bien) sont select schema_name from information_schema.schemata;et select nspname from pg_catalog.pg_namespace;:

entrez la description de l'image ici

-) Maintenant que vous avez les schémas, vous voulez connaître les tables de ces schémas. Pour cela, vous pouvez utiliser la dtcommande. Par exemple\dt "GeneSchema1".*

entrez la description de l'image ici

*) Vous pouvez maintenant faire vos requêtes. Par exemple:

entrez la description de l'image ici

*) Voici à quoi ressemblent la base de données, le schéma et les tables ci-dessus dans pgAdmin:

entrez la description de l'image ici

Gène
la source
3
  1. Ouvrez une invite de commande et accédez au répertoire d'installation de Postgres. Dans mon cas, mon chemin Postgres est "D: \ TOOLS \ Postgresql-9.4.1-3" .Après cela, déplacez-vous vers le répertoire bin de Postgres.So. L'invite de commande s'affiche comme "D: \ TOOLS \ Postgresql-9.4.1-3. \ bin> "
  2. Mon objectif est maintenant de sélectionner "UserName" dans la table des utilisateurs en utilisant la valeur "UserId". La requête de base de données est donc " Sélectionnez u." UserName "parmi les utilisateurs u Où u." UserId "= 1 ".

La même requête est écrite comme ci-dessous pour l'invite de commande psql de postgres.

D: \ TOOLS \ Postgresql-9.4.1-3 \ bin> psql -U postgres -d DatabaseName -h localhost - t -c "Sélectionnez u. \" UserName \ "parmi les utilisateurs u Où u. \" UserId \ "= 1;

KPatel
la source
3

Je n'ai aucun doute sur la réponse @Grant. Mais je suis parfois confronté à quelques problèmes, comme si le nom de la colonne est similaire à n'importe quel mot clé réservé de postgresql tel que natural dans ce cas, un SQL similaire est difficile à exécuter à partir de la ligne de commande car "\ natural \" sera nécessaire dans le champ Query. Mon approche consiste donc à écrire le SQL dans un fichier séparé et à exécuter le fichier SQL à partir de la ligne de commande. Cela a aussi un autre avantage. Si vous devez modifier la requête d'un grand script, vous n'avez pas besoin de toucher le fichier de script ou la commande. Modifiez uniquement le fichier SQL comme ceci

psql -h localhost -d database -U postgres -p 5432 -a -q -f /path/to/the/file.sql
Devil's Dream
la source
3

J'ai également remarqué que la requête

SELECT * FROM nom_table;

donne une erreur sur l'invite de commande psql et

SELECT * FROM "tablename";

fonctionne bien, vraiment étrange, alors n'oubliez pas les guillemets doubles. J'ai toujours aimé les bases de données :-(

Ben
la source
-8

Pour un type particulier d'instructions, vous pouvez trouver plus approprié à utiliser Azure Data Studio- pour tout le reste, il est livré avec une ligne de commande intégrée. En utilisant le studio, vous pouvez trouver les instructions de frappe et la lecture du résultat plus confortables.

Suivez les étapes ci-dessous:

  1. Installer Azure Data Studio - est un éditeur moderne multiplateforme axé sur le développement de données; il est open source et extensible - deux choses sur lesquelles PostgreSQL lui-même est basé;
  2. Installez l'extension PostgreSQL
  3. Connectez-vous à votre serveur local ou distant:

    entrez la description de l'image ici

  4. Concentrez-vous sur l'écriture et l'exécution de SQL uniquement:

    entrez la description de l'image ici

Il existe de nombreuses fonctionnalités intéressantes telles que l'enregistrement des connexions, la création de groupes de serveurs et même le terminal intégré si vous êtes plus à l'aise d'effectuer une tâche via le psql.

gotqn
la source