Speichern PostgreSQL Abfrage-Ergebnis Shell-oder PostgreSQL-variable
Zum Beispiel habe ich eine Tabelle speichert Wert:
select * from myvalue;
val
-------
12345
(1 row)
Wie kann ich diese 12345
in eine variable in postgresql oder shell-Skript aus?
Hier ist, was ich versucht habe in mein shell-script:
var=$(psql -h host -U user -d db <<SQLSTMT
SELECT * FROM myvalue;
SQLSTMT)
aber echo $var
gibt mir:
val ------- 12345 (1 row)
Ich habe auch versucht
\set var (select * from myvalue)
in psql und wenn ich \set
es Listen:
var = '(select*frommyvalue)'
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, Nein, Nein! Verwenden Sie "raw-Daten" - Schalter aus der psql, wie "-t" oder "\t" und übergeben Sie die Abfrage, um psql statt Parsen von ascii-Tabelle, komm 🙂
Wenn Sie wirklich brauchen, analysieren psql-Ausgang, können Sie auch H-Schalter ( schaltet die HTML-Ausgabe ), und analysieren Sie diese mit einigen perl-Modul zum Parsen von html-Tabellen verwendet, dass ich einmal oder zweimal.. Auch die, die Sie verwenden möchten, können Sie einen pgpass-Datei und
~/.psqlrc
für einige Standardwerte, wie Standard-DB zu verbinden, wenn nicht angegeben.psql
hat eine-c
/--command=
option zu akzeptieren SQL von der Kommandozeile aus, und-t
/--tuples-only
option zur Steuerung der Ausgabe-Formatierung.Filtern Sie das Ergebnis erhalten Sie mit Ihrer
psql
Befehl:In diese Antwort erkläre ich eine Möglichkeit, es zu tun, mit einem co-Prozess zu kommunizieren, hin-und-her mit
psql
. Das ist overkill, wenn alles, was Sie brauchen, ist zum ausführen einer Abfrage und Sie bekommen ein Ergebnis, aber vielleicht gut zu wissen, wenn Sie shell-Skripting mitpsql
.Keines dieser arbeitete für mich, aber das Tat:
median_avm=
psql "host=${dps1000} port=#### dbname=@@@ user=${reduser} password=${redpass}" -c "SELECT AVG(column) FROM db.table;" -t
Verwendung einer source-Datei mit ${dps1000}, ${reduser}, ${redpass} definiert und die manuelle Eingabe von port und Datenbankname