Antworten:
Aus psqls Hilfe ( \?
):
\ o [DATEI] sendet alle Abfrageergebnisse an Datei oder | Pipe
Die Befehlsfolge sieht folgendermaßen aus:
[wist@scifres ~]$ psql db
Welcome to psql 8.3.6, the PostgreSQL interactive terminal
db=>\o out.txt
db=>\dt
db=>\q
\o
wird es ausgeschaltet.
\?
nicht in die Datei. :(
\o queries-output.txt
leitet alle nachfolgenden Befehle o / p in die benannte Datei um, queries-output.txt
und durch Eingabe \o
(erneut an der psql- Eingabeaufforderung) wird dieses Umleitungsverhalten zurückgesetzt.
Der \o
Befehl psql wurde bereits von jhwist beschrieben.
Ein alternativer Ansatz besteht darin, mit dem COPY TO
Befehl direkt in eine Datei auf dem Server zu schreiben. Dies hat den Vorteil, dass es in einem einfach zu analysierenden Format Ihrer Wahl ausgegeben wird - anstelle des tabellarischen Formats von psql. Es ist auch sehr einfach, mit in eine andere Tabelle / Datenbank zu importieren COPY FROM
.
NB! Dies erfordert Superuser-Berechtigungen und schreibt in eine Datei auf dem Server .
Beispiel: COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')
Erstellt eine CSV-Datei mit ';' als Feldtrennzeichen.
Einzelheiten finden Sie wie immer in der Dokumentation
\copy
Dies ist ein Postgres-Befehl, der für jeden Benutzer verwendet werden kann. Ich weiß nicht, ob es für \ dt funktioniert oder nicht, aber die allgemeine Syntax wird über den folgenden Link reproduziert: Postgres SQL-Kopiersyntax
\copy (select * from tempTable limit 100) to 'filenameinquotes' with header delimiter as ','
Oben wird die Ausgabe der Auswahlabfrage in dem als CSV-Datei bereitgestellten Dateinamen gespeichert
BEARBEITEN:
Für meinen psql-Server funktioniert der folgende Befehl. Dies ist eine ältere Version v8.5
copy (select * from table1) to 'full_path_filename' csv header;
Wenn Sie den folgenden Fehler erhalten haben
ufgtoolspg=> COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')
;
ERROR: must be superuser to COPY to or from a file
HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
Sie können es folgendermaßen ausführen:
psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv
Verwenden Sie die folgende Abfrage, um das Ergebnis in einer CSV-Datei zu speichern
\ copy (Ihre Abfrage) in den CSV-Header 'file path';
Beispiel
\ copy (Name, Datumsbestellung aus Kaufbestellung auswählen) in den Lebenslauf-Header '/home/ankit/Desktop/result.csv';
Hoffe das hilft dir.
Ich gehe davon aus, dass es dafür einen internen psql-Befehl gibt, aber Sie können den script
Befehl auch über das Paket util-linux-ng ausführen :
BESCHREIBUNG Das Skript erstellt ein Typoskript für alles, was auf Ihrem Terminal gedruckt ist.
Dieser Ansatz funktioniert mit jedem psql-Befehl vom einfachsten bis zum komplexesten, ohne dass Änderungen oder Anpassungen am ursprünglichen Befehl erforderlich sind.
HINWEIS: Für Linux-Server.
MODELL
read -r -d '' FILE_CONTENT << 'HEREDOC'
[COMMAND_CONTENT]
HEREDOC
echo -n "$FILE_CONTENT" > sqlcmd
BEISPIEL
read -r -d '' FILE_CONTENT << 'HEREDOC'
DO $f$
declare
curid INT := 0;
vdata BYTEA;
badid VARCHAR;
loc VARCHAR;
begin
FOR badid IN SELECT some_field FROM public.some_base LOOP
begin
select 'ctid - '||ctid||'pagenumber - '||(ctid::text::point) [0]::bigint
into loc
from public.some_base where some_field = badid;
SELECT file||' '
INTO vdata
FROM public.some_base where some_field = badid;
exception
when others then
raise notice 'Block/PageNumber - % ',loc;
raise notice 'Corrupted id - % ', badid;
--return;
end;
end loop;
end;
$f$;
HEREDOC
echo -n "$FILE_CONTENT" > sqlcmd
MODELL
sudo -u postgres psql [some_db] -c "$(cat sqlcmd)" >>sqlop 2>&1
BEISPIEL
sudo -u postgres psql some_db -c "$(cat sqlcmd)" >>sqlop 2>&1
cat sqlop
Getan! Vielen Dank! = D.
Ansatz für Docker
über den Befehl psql
docker exec -i %containerid% psql -U %user% -c '\dt' > tables.txt
oder Abfrage aus SQL-Datei
docker exec -i %containerid% psql -U %user% < file.sql > data.txt