Поиск строки «где-то» в базе данных - PullRequest
6 голосов
/ 13 марта 2009

Вот моя проблема: я впервые смотрю на чье-то приложение на базе Postgresql и пытаюсь найти причину определенных предупреждений / ошибок в системном журнале. Я ничего не знаю о схеме базы данных. Я ничего не знаю об исходном коде. Но мне нужно отследить проблему.

Я легко могу найти строковое содержимое кода на основе текстового файла, такого как php и perl, используя команду UNIX 'grep'; даже для скомпилированных двоичных файлов я могу использовать команды UNIX 'find' и 'strings'.

Моя проблема в том, что часть текста, созданного в лог-файле, поступает из самой базы данных. Проверка файла журнала ошибок для базы данных не дает ничего полезного, так как нет проблем с запросами, используемыми приложением.

То, что я хотел бы сделать, - это исчерпывающий поиск строки во всех столбцах и во всех таблицах базы данных. Возможно ли это и как?

Заранее спасибо за любые указатели. Используется среда Postgresql 8.2, но было бы полезно узнать, как это сделать и в других разновидностях реляционных баз данных.

Ответы [ 3 ]

12 голосов
/ 13 марта 2009

Это может быть неоптимально, но, поскольку я уже знаю, как выполнить grep текстового файла, я просто преобразовал бы базу данных в текстовый файл и сгенерировал бы это. В этом случае преобразование базы данных в текстовый файл будет означать сброс данных с использованием pg_dump .

Самый быстрый / простой / эффективный способ не всегда элегантен ...

1 голос
/ 13 марта 2009

Я использовал варианты этого в прошлом.

1 голос
/ 13 марта 2009

Я не знаком с Postgresql, но я думаю, что, как и SQL Server, он имеет таблицы / представления метаданных, которые описывают схему базы данных (для SQL Server 2005+ я бы сослался на sys .tables и sys.columns). Идея состояла бы в том, чтобы сгенерировать серию специальных запросов на основе схемы таблицы, каждый из которых находит совпадения в определенной комбинации таблица / поле и подкачивает совпадения в таблицу «log».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...