2009-03-13 7 views
6

Hier ist mein Problem: Ich bin zum ersten Mal auf jemandes Postgresql-basierten Datenbankanwendung und versuchen zu finden, was bestimmte Warnungen/Fehler in der Protokolldatei des Systems verursacht. Ich weiß nichts über das Datenbankschema. Ich weiß nichts über den Quellcode. Aber ich muss das Problem aufspüren.Suche nach einer Zeichenfolge "irgendwo" in einer Datenbank

Ich kann leicht nach Zeichenfolge Inhalt von Text-Datei-basierten Code wie PHP und Perl, mit dem UNIX-Befehl 'Grep'; selbst für kompilierte Binärdateien kann ich die UNIX-Befehle 'find' und 'strings' verwenden.

Mein Problem ist, dass ein Teil des in der Logdatei erzeugten Textes aus der Datenbank selbst stammt. Das Überprüfen der Fehlerprotokolldatei für die Datenbank liefert nichts Sinnvolles, da es keine Probleme mit den von der Anwendung verwendeten Abfragen gibt.

Was ich tun möchte, ist erschöpfend alle Spalten und alle Tabellen der Datenbank nach einer Zeichenfolge suchen. Ist das möglich und wie?

Vielen Dank im Voraus für alle Zeiger. Die verwendete Umgebung ist Postgresql 8.2, aber es wäre nützlich zu wissen, wie dies auch in anderen Varianten von relationalen Datenbanken funktioniert.

Antwort

11

Es ist vielleicht nicht optimal, aber da ich bereits weiß, wie man eine Textdatei grep, würde ich nur die Datenbank in eine Textdatei umwandeln und das grep. Das Konvertieren der Datenbank in eine Textdatei würde in diesem Fall bedeuten, dass die Daten unter Verwendung von pg_dump ausgegeben werden.

Der schnellste/einfachste/effizienteste Weg ist nicht immer elegant ...

+0

Schnell und schmutzig: Ich mag es. Diese Lösung funktioniert gut für diejenigen von uns vertrauter mit Regex als SQL-Abfragen und Funktionen. Vielen Dank! –

1

Ich bin nicht vertraut mit Postgresql, aber ich würde denken, dass, wie SQL Server, hat Meta-Daten Tabellen/Ansichten, die das Schema der Datenbank beschreiben (für SQL Server 2005+, würde ich Sie beziehen sich auf sys.tables und sys.columns). Die Idee wäre, eine Reihe von Ad-hoc-Abfragen auf der Grundlage des Tabellenschemas zu erzeugen, wobei jede Suche Übereinstimmungen in einer bestimmten Tabellen-/Feldkombination findet und Übereinstimmungen in eine "Protokoll" -Tabelle gepumpt werden.

1

Ich habe in der Vergangenheit Varianten von this verwendet.