Was ist eine bequeme Möglichkeit, mehrzeilige Abfragen in Postgres mit ssh auszuführen?

9

Angenommen, ich muss einige Abfragen von Hand in die Konsole schreiben. Wie lassen sich mehrzeilige Abfragen wie CREATE TABLEAnweisungen am effizientesten ausführen ?

Ich bin es gewohnt, Microsoft Management Studio zu verwenden, aber jetzt muss ich mich spontan mit PostgreSQL vertraut machen.

Chad Harrison
quelle
Geben Sie es ein? Kopieren und Einfügen? Von einer Datei umleiten?
Michael Hampton
Ja, ich meine, tippe es mit meinen Fingern ein: P. Was ich damit sagen will, ist, dass die Postgres- #Eingabeaufforderung immer nur in einer Zeile angezeigt wird, was für Dinge wie CREATE DATABASEoder großartig ist ALTER USER. Wie kann ich meinen Text vor der Ausführung gut formatieren?
Chad Harrison

Antworten:

5

Es gibt wirklich keine "mehrzeilige Abfrage" - soweit es PostgreSQL betrifft, sind all diese Leerzeichen und diese Zeilenumbrüche bedeutungslos (es sei denn, sie kommen in einer Zeichenfolge vor oder wir sprechen über Tabulatoren und dergleichen in einer COPYAnweisung oder einer wenige andere besondere Orte).

Das Schreiben von Abfragen "auf der Konsole" über SSH erfolgt normalerweise mit dem psqlTool, dem interaktiven Postgres-Terminal ( weitere Informationen finden Sie in den Dokumenten ).

Mit dieser Option können Sie Textdateien mit Abfragen an übergeben .psql-f

Sie können Abfragen auch psqlüber die Befehlszeile übergeben (entsprechend Ihrer Shell angegeben) oder über STDIN (den Standardeingabestream) weiterleiten - siehe -cOption.

voretaq7
quelle
Rohre, sollte über Rohre nachgedacht haben. Ich lerne noch
Chad Harrison
24

Folgendes führt Sie zum interaktiven Terminal von PostgreSQL:

$ psql <your database name>

Geben Sie dann \e(oder \edit) ein, um einen Editor zu öffnen ( viStandardeinstellung):

# \e

Schreiben Sie eine Abfrage:

select now();

Speichern und beenden Sie schließlich Ihren Editor (z. B. :wqin vi) und psqlführen Sie die gerade geschriebene Abfrage aus.

Um einen anderen Editor, wie vimoder nano, Satz eine der folgenden Umgebungsvariablen: PSQL_EDITOR, EDITOR, VISUAL.

Weitere Informationen finden Sie unter https://www.postgresql.org/docs/current/app-psql.html und suchen Sie nach \e.

TheGrimmScientist
quelle
2

Sie können die Abfrage in eine temporäre Datei schreiben und mit ausführen psql -f /path/to/temp/file

Nam G VU
quelle
0

Natürlich, aber wenn jemand nichts davon weiß, können Sie mehrzeilige Anweisungen direkt in die psql-Eingabeaufforderung schreiben:

psql -h localhost -p 5432 -U postgres public
public=# SELECT
public=# *
public=# FROM
public=# mytable
public=# LIMIT 1;

Beachten Sie das nachfolgende ;Zeichen. Jeder SQL-Befehl wird erst ausgeführt, wenn dieses Zeichen ausgegeben wurde. Der einfachste Weg ist also, einfach mehrzeilige SQL-Befehle mit einem Trailing zu kopieren und einzufügen ;.

Alex
quelle