Jede Ergebnis-Zeile in eigener Textdatei speichern

Tom.S

Fleissiger Benutzer
Beiträge
62
Hallo,
ist es mit PostgreSQL machbar, die Ergebniszeilen eines SELECT in gesonderten Textdateien zu speichern? Bestenfalls soll sich der Dateiname aus der Abfrage erstellen lassen.

Beispiel:
SELECT name, personen_angaben FROM Person

Ergebnis (einige 1000 Zeilen):
'Andrea' | 'Andrea hat Kunstgeschichte studiert ...'
'Jochen' | 'Jochen arbeitet als Übersetzer ...'
...

Gewünscht wären einige Tausend Textdateien:
Datei andrea.txt (Inhalt: "Andrea hat Kunstgeschichte studiert ...")
Datei jochen.txt (Inhalt: "Jochen arbeitet als Übersetzer ...")

Und wenn das nicht direkt mit PostgreSQL geht, kennt Ihr eine Möglichkeit, die Daten erst in eine einzige Textdatei zu exportieren und dann die Abschnitte automatisch in gesonderten Textdateien zu speichern?
 
Werbung:
Geht, aber nicht direkt. Du wirst für jede Zeile einen passenden Befehl erzeugen müssen und ausführen. Als Schnellschuß, Du hast:

Code:
test=# select * from tom;
 id |  name  |  angaben   
----+---------+-----------------------------------------
  1 | andrea  | Andrea hat Kunstgeschichte studiert ...
  2 | Jochen  | Jochen arbeitet als Übersetzer ...
  3 | Andreas | Andreas war in Tallinn zur pgconf.eu
(3 Zeilen)


In der Bash gibts Du ein:

Code:
psql test -t  -c "select 'copy (select angaben from tom where id = ' || id || ')  to ''/tmp/' || name || '.txt'';' from tom;"  | psql test

und findest dann die 3 Dateien unter /tmp.


Nachteilig ist, daß für jede Zeile einmal extra psql gestartet wird, also eine Client-Verbindung aufgebaut wird. Bei größeren Mengen bzw. wenn Du das regelmäßig brauchst könntest Du Dir eine Stored Procedure schreiben, die das macht. Dort wie eben gezeigt einen passenden SQL-String basteln und dann via EXECUTE ausführen. Dürfte erheblich schneller sein.
 
Das ist super! Zwar bastel ich mir ständig über Querys Befehle, Skripte etc. zusammen. Das mit dem copy-Befehl auch zu machen, darauf bin ich nicht gekommen.

Danke!
 
Werbung:
Zurück
Oben