Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Jede Ergebnis-Zeile in eigener Textdatei speichern

Dieses Thema im Forum "PostgreSQL" wurde erstellt von Tom.S, 4 November 2016.

  1. Tom.S

    Tom.S Fleissiger Benutzer

    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?
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
    Tom.S gefällt das.
  3. Tom.S

    Tom.S Fleissiger Benutzer

    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!
     
  4. akretschmer

    akretschmer Datenbank-Guru

    you are welcome ...
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden