Как выполнить поиск определенного слова в базе данных Postgresql?

Каким образом можно выполнить поиск слова "rakomkakom" в базе данных Postgres приложения без информации о таблицах или столбцах, в которых оно может быть храниться?
  • 9 февраля 2024 г. 10:58
Ответы на вопрос 2
Поиск слова "rakomkakom" в целой базе данных PostgreSQL без знания конкретных таблиц и столбцов представляет определённые сложности и может быть ресурсозатратным, так как требует полного сканирования каждого столбца каждой таблицы в базе данных. Возможное решение этой задачи может заключаться в создании скрипта, который будет итерировать через все таблицы и столбцы и выполнять поиск заданной строки. Запросы на SQL могут быть неэффективными и медленными, но чтобы дать общую идею, можно использовать следующий подход:

```sql
DO $$ 
DECLARE 
    r RECORD;
    v_query TEXT;
BEGIN
    FOR r IN (SELECT table_schema, table_name, column_name 
              FROM information_schema.columns 
              WHERE table_schema NOT IN ('pg_catalog', 'information_schema') 
              AND data_type IN ('character', 'character varying', 'text')) LOOP
        BEGIN
            v_query := FORMAT('SELECT %I as column_name, %I as table_name FROM %I.%I WHERE %I LIKE %L LIMIT 1', 
                              r.column_name, r.table_name, r.table_schema, r.table_name, r.column_name, '%rakomkakom%');
            EXECUTE v_query;
            EXCEPTION WHEN OTHERS THEN
            -- Ignore errors and continue
        END;
    END LOOP;
END $$;
```

Данный анонимный блок кода (процедурный код PL/pgSQL) создаст и выполнит поисковый запрос для каждой колонки типов данных 'character', 'character varying' и 'text' в каждой таблице всех схем базы данных, исключая системные схемы `pg_catalog` и `information_schema`. Если строка будет найдена, этот запрос вернёт название столбца и таблицу.

Также можно добавить вывод результатов в консоль или записать их в таблицу для последующего анализа. Тем не менее, в зависимости от размера базы данная операция может занять очень много времени и ресурсов, так что её следует использовать с осторожностью на продуктивных системах.

Для более оптимального решения можно использовать расширение PostgreSQL, такое как `pg_search`, которое позволяет использовать более эффективные способы полнотекстового поиска при наличии соответствующей структуры индексации и предварительно подготовленной схемы данных.
Делаете дамп базы в файл и ищите слово текстовым редактором. 
В каком Insert предложении будет искомый текст, в той таблице, куда применяется insert нужно смотреть.
Похожие вопросы