Führen Sie PostgreSQL-Abfragen über die Befehlszeile aus


278

Ich habe Daten in eine Tabelle eingefügt ... Ich möchte jetzt eine ganze Tabelle mit Zeilen, Spalten und Daten sehen. Wie kann ich es durch Befehl anzeigen?

Antworten:


474

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

Wenn Sie mit postgresql noch nicht vertraut sind und mit der Verwendung des Befehlszeilentools nicht vertraut sind psql, sollten Sie sich eines verwirrenden Verhaltens bewusst sein, wenn Sie an einer interaktiven Sitzung teilnehmen.

Initiieren Sie beispielsweise eine interaktive Sitzung:

psql -U username mydatabase 
mydatabase=#

Zu diesem Zeitpunkt können Sie eine Abfrage direkt eingeben, müssen jedoch daran denken, die Abfrage mit einem Semikolon zu beenden;

Beispielsweise:

mydatabase=# SELECT * FROM mytable;

Wenn Sie das Semikolon vergessen haben, erhalten Sie beim Drücken der Eingabetaste nichts in Ihrer Rückleitung, da psqldavon ausgegangen wird, dass Sie die Eingabe Ihrer Abfrage noch nicht abgeschlossen haben. Dies kann zu allerlei Verwirrung führen. Wenn Sie beispielsweise dieselbe Abfrage erneut eingeben, wird höchstwahrscheinlich ein Syntaxfehler erstellt.

Versuchen Sie als Experiment, an der psql-Eingabeaufforderung ein beliebiges Garble einzugeben, und drücken Sie die Eingabetaste. psqlwird Ihnen stillschweigend eine neue Zeile zur Verfügung stellen. Wenn Sie in dieser neuen Zeile ein Semikolon eingeben und dann die Eingabetaste drücken, erhalten Sie den FEHLER:

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

Als Faustregel gilt: Wenn Sie keine Antwort von erhalten haben, psqlaber mindestens ETWAS erwartet haben, haben Sie das Semikolon vergessen;


4
Seit mindestens 7.2 (das ist so weit zurück, wie ich es überprüft habe, könnte es sogar noch früher sein) hat psql die Option --single-line(oder -s), mit der jeder Befehl sofort ausgeführt werden kann, ohne dass ein Semikolon hinzugefügt werden muss.
Gordon

3
Ich habe eine Stunde lang debuggt und das Problem war das fehlende Semikolon. DANKE
Dawson B

105
SELECT * FROM my_table;

Wo my_tableist der Name Ihres Tisches?

BEARBEITEN:

psql -c "SELECT * FROM my_table"

oder geben Sie einfach psqlIhre Abfragen ein.


7
psql -U username -c your_database "SELECT * FROM my_table"
DrColossos

3
Wie gesagt, Sie sollten Ihren Befehl mit einem Semikolon beenden . Wenn Sie sich auf einem Windows-System befinden, lesen Sie die Hinweise für Windows-Benutzer. Fügencmd.exe /c chcp 1252 Sie sie einfach ein, nachdem Sie die Konsolenaufforderung geöffnet haben.
D_Guidi

2
Fügen Sie für zukünftige Benutzer unbedingt -d vor Ihrem Datenbanknamen und -c vor der Abfrage hinzu: psql -U Benutzername -d mydatabase -c 'SELECT * FROM mytable'
jmhead

2
hat nicht für mich gearbeitet. Ich habepsql: FATAL: database "SELECT * FROM tb_name" does not exist
Jaswinder

Wie @DrColossos angedeutet hat, scheinen doppelte Anführungszeichen um den Befehl zumindest in Windows-Cli- / Batch-Umgebungen erforderlich zu sein.
jewbix.cube

42

Wenn Ihre Datenbank kennwortgeschützt ist, lautet die Lösung:

PGPASSWORD=password  psql -U username -d dbname -c "select * from my_table"

3
Nie wissen, kann auf diese Weise Passwort geben. Es ist sehr praktisch, wenn Sie einen Test durchführen. Danke
zhihong

20

Öffnen Sie "SQL Shell (psql)" von Ihren Anwendungen (Mac).

Geben Sie hier die Bildbeschreibung ein

Klicken Sie für die Standardeinstellungen auf die Eingabetaste. Geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden.

Geben Sie hier die Bildbeschreibung ein

*) Geben Sie \?für Hilfe ein

*) Geben Sie ein, um \conninfozu sehen, als welcher Benutzer Sie verbunden sind.

*) Geben Sie ein \l, um die Liste der Datenbanken anzuzeigen.

Geben Sie hier die Bildbeschreibung ein

*) Eine Verbindung mit einer Datenbank von \c <Name of DB>zum Beispiel\c GeneDB1

Geben Sie hier die Bildbeschreibung ein

Sie sollten sehen, wie sich die Eingabeaufforderung der Taste in die neue Datenbank ändert, wie folgt: Geben Sie hier die Bildbeschreibung ein

*) Jetzt, da Sie sich in einer bestimmten Datenbank befinden, möchten Sie die Schemas für diese Datenbank kennen. Der beste Befehl dazu ist \dn.

Geben Sie hier die Bildbeschreibung ein

Andere Befehle, die ebenfalls funktionieren (aber nicht so gut), sind select schema_name from information_schema.schemata;und select nspname from pg_catalog.pg_namespace;:

Geben Sie hier die Bildbeschreibung ein

-) Nachdem Sie die Schemata haben, möchten Sie die Tabellen in diesen Schemata kennen. Dafür können Sie den dtBefehl verwenden. Beispielsweise\dt "GeneSchema1".*

Geben Sie hier die Bildbeschreibung ein

*) Jetzt können Sie Ihre Fragen stellen. Beispielsweise:

Geben Sie hier die Bildbeschreibung ein

*) So sehen die obigen DBs, Schemas und Tabellen in pgAdmin aus:

Geben Sie hier die Bildbeschreibung ein


3
  1. Öffnen Sie eine Eingabeaufforderung und wechseln Sie in das Verzeichnis, in dem Postgres installiert ist. In meinem Fall lautet mein Postgres-Pfad "D: \ TOOLS \ Postgresql-9.4.1-3". Danach wird in das bin-Verzeichnis der Postgres.So-Eingabeaufforderung "D: \ TOOLS \ Postgresql-9.4.1-3" verschoben \ bin> "
  2. Jetzt ist mein Ziel, "Benutzername" aus der Benutzertabelle mit dem Wert "Benutzer-ID" auszuwählen. Die Datenbankabfrage lautet also " U auswählen". Benutzername "von Benutzern u Wobei" Benutzer-ID "= 1 ".

Die gleiche Abfrage wird wie unten für die psql-Eingabeaufforderung von postgres geschrieben.

D: \ TOOLS \ Postgresql-9.4.1-3 \ bin> psql -U postgres -d Datenbankname -h localhost - t -c "Wählen Sie u. \" Benutzername \ "aus den Benutzern u Wobei u. \" UserId \ "= 1;


3

Ich habe keinen Zweifel an der Antwort von @Grant. Manchmal treten jedoch nur wenige Probleme auf, z. B. wenn der Spaltenname einem reservierten Schlüsselwort von postgresql ähnlich ist, z. B. natural. In diesem Fall ist es schwierig, ähnliche SQL-Anweisungen über die Befehlszeile auszuführen, da "\ natural \" im Abfragefeld benötigt wird. Mein Ansatz ist es also, SQL in eine separate Datei zu schreiben und die SQL-Datei über die Befehlszeile auszuführen. Dies hat noch einen weiteren Vorteil. Wenn Sie die Abfrage für ein großes Skript ändern müssen, müssen Sie die Skriptdatei oder den Befehl nicht berühren. Ändern Sie die SQL-Datei nur so

psql -h localhost -d database -U postgres -p 5432 -a -q -f /path/to/the/file.sql

3

Mir ist auch aufgefallen, dass die Abfrage

SELECT * FROM Tabellenname;

gibt einen Fehler an der psql-Eingabeaufforderung aus und

SELECT * FROM "Tabellenname";

läuft gut, wirklich seltsam, also vergiss die doppelten Anführungszeichen nicht. Ich mochte immer Datenbanken :-(


-8

Für bestimmte Arten von Anweisungen ist die Verwendung besser geeignet Azure Data Studio- für alles andere ist eine Befehlszeile integriert. Im Studio können Sie Anweisungen zum Schreiben und Lesen der Ausgabe bequemer finden.

Folgen Sie den unteren Schritten:

  1. Azure Data Studio installieren - ist ein plattformübergreifender moderner Editor, der sich auf die Datenentwicklung konzentriert. Es ist Open Source und erweiterbar - zwei Dinge, auf denen PostgreSQL selbst basiert;
  2. Installieren Sie die PostgreSQL-Erweiterung
  3. Stellen Sie eine Verbindung zu Ihrem lokalen oder Remote-Server her:

    Geben Sie hier die Bildbeschreibung ein

  4. Konzentrieren Sie sich nur auf das Schreiben und Ausführen von SQL:

    Geben Sie hier die Bildbeschreibung ein

Es gibt viele nette Funktionen wie das Speichern von Verbindungen, das Erstellen von Servergruppen und sogar das integrierte Terminal, wenn Sie eine Aufgabe über das Internet bequemer erledigen möchten psql.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.