PostgreSQL query/error logging für .sql-Skripts
Hier ist das problem: ich muss wissen, wie man PostgreSQL-Ausgabe von einer ausgeführt .sql-Skript zum protokollieren in eine Datei, einschließlich Fehler-und Abfrage-Ergebnisse.
Habe ich bereits umgeben mein script mit \o und \o öffnen und schließen-tags, aber nur protokolliert die Ergebnisse von Abfragen, die sagt mir nichts darüber, was getan und war nicht erfolgreich. Ich habe versucht, das Weiterreichen der Ergebnisse eines Aufrufs in PostgreSQL unter Verwendung von Unix-tools wie:
$~: psql < filename.sql | tee &> filename.log
... ohne Erfolg. Mit dem Namen.melden Sie in diesem Fall endet völlig leer.
Möchte ich nicht aktivieren, universal logging, wie ich bin nur besorgt, mit dem Erfolg/Misserfolg der scripts, die ich geschrieben habe und die Buchführung über diese für zukünftige Referenz.
In Oracle, die ich verwendet, SPOOL, in MySQL, die ich verwendet TEE. Beides funktionierte gut genug für meine Bedürfnisse, aber \o nicht über diese Funktionalität, und auch nicht die Aktivierung der Protokollierung, da diese Protokolle in einer einzigen Datei und ich möchte, dass meine logs getrennt basierend auf dem die Datei geführt, in die betreffenden Protokolle.
Jede mögliche Hilfe würde geschätzt.
EDIT: die version die ich benutze ist 9.1
EDIT: Das problem ich habe ist, dass die Verwendung von -f und mit < ausführen .sql-Dateien gibt mir im wesentlichen die gleichen Ergebnisse; es nicht log der Fehler protokolliert nur Abfrage-Ergebnisse. Ich muss irgendwie stderr (wenn es das ist, was verwendet wird), um es zu drucken die Nachrichten in eine Datei und nicht nur die Kommando-Zeile so, dass die Datei im wesentlichen identisch sind mit denen, die Befehl Linie die Ergebnisse mit der Datei, mit der Abfrage-Ergebnisse und Fehler in sich vereint. Der Grund, warum ich brauchen, um dies zu tun ist, denn Sie macht das debugging ein .sql-Datei viel einfacher und es mir erlaubt zu halten, gezielte Datensätze unter Vermeidung von universal-Fehler-Protokollierung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich mit dem falschen redirect syntax in der Befehlszeile. Dies ist zwar nicht die ideale Lösung ist meiner Meinung nach (ich habe daran zu erinnern, zu ändern, jeder Befehl, den ich jemals gelaufen umleiten der Ausgabe in eine Datei), funktioniert es, und das ist alles, was ich kümmern.
Umleiten sowohl stdout und stderr in eine Datei zu protokollieren, die Ergebnisse nur einer .sql-Datei, einschließlich Fehler und Abfragen, kann man Folgendes tun:
Hier ist die Aufteilung: -f (wie angedeutet in der Antwort von Frank Heikens) ist eine besseren Befehl als < für das Lesen ein .sql-script, weil die Zeilennummern angezeigt, dass der Auslöser für den Fehler. &> ist ein Linux-Kommandozeilen-trick, stellt sowohl stdout und stderr in die Datei, die folgt. Zur Begrenzung der log nur Fehler (nur sdterr-Ausgabe), verwenden Sie einfach 2> statt &>. Es gibt keine Notwendigkeit für eine Pfeife, weil beide Ströme gehen auf die gleiche Stelle.
Bemerken Sie jedoch, dass der obige Befehl nimmt die Ausgabe des Befehls und legt ihn in der Datei, und Sie deshalb nicht sehen, dass Ausgabe in der Kommandozeile. Dies ist nicht ideal für die Fehlersuche .sql-Skripts, so kann der folgende Befehl verwendet werden, stattdessen:
Die Aufschlüsselung ist hier, dass die 2>&1 ist die lange form &>, aber beim arbeiten mit pipes, 2>&1 vermeidet BASH Interpretation der syntax als Fehler (fragt mich nicht warum). tee kann einfach Ausgang gehen beide auf die Konsole und in die angegebene Datei. Ein Dateiname in allen der oben genannten Befehle können Sie einen vollständigen Pfad und kann auch das ~ (für das home-Verzeichnis), und alles, was Linux interpretieren kann, als ein Gültiger Dateiname und/oder Pfad.
Immer noch, diese Lösung ist nicht ideal, da es außerhalb der .sql-Skripts, die ich brauche, um sich anzumelden. Jedoch, diese Methode funktioniert. Ich gehe davon aus, dass die Geschichte PostgreSQL hat mit Linux ist teilweise die Schuld für die Abhängigkeit von der Befehl-Linie Werkzeuge, um diese Art der Sache.
Funktioniert das auch - den-a -b-und-e-Optionen für "verbose logging:"
psql --help zeigt:
Verwenden -f (und andere Einstellungen) zu füttern psql.