F.56. tsearch2

Модуль tsearch2 предоставляет функциональность текстового поиска для обратной совместимости с приложениями, которые использовали tsearch2 до того, как текстовый поиск был интегрирован в ядро PostgreSQL в версии 8.3.

F.56.1. Вопросы переносимости

Хотя встроенные функции текстового поиска были основаны на функциях tsearch2 и во многом похожи, есть ряд небольших различий, из-за которых возникают вопросы переносимости с существующими приложениями:

  • Были изменены имена некоторых функций, например функция rank стала ts_rank. Модуль замены tsearch2 предоставляет псевдонимы для старых имён.

  • Все типы данных и функции встроенного текстового поиска существуют в системной схеме pg_catalog. При установке из tsearch2 эти объекты обычно помещались в схему public, хотя некоторые пользователи могли поместить их в специальную отдельную схему. Таким образом, ссылки на объекты, дополненные схемой, окажутся нерабочими в любом случае. Модуль замены tsearch2 предоставляет для этих объектов псевдонимы, которые помещаются в схему public (или другую, если это требуется), чтобы такие ссылки продолжали работать.

  • Для встроенных функций текстового поиска отсутствуют понятия «текущий анализатор» и «текущий словарь», есть только текущая конфигурация поиска (она задаётся параметром default_text_search_config). Хотя текущий анализатор и текущий словарь использовались раньше только функциями, предназначенными для отладки, это всё же может мешать переносимости в некоторых случаях. Модуль замены tsearch2 имитирует эти дополнительные переменные состояния и предоставляет обратно-совместимые функции, позволяющие задать и прочитать их.

Есть ряд проблем, решения которых не предлагает модуль tsearch2, так что код приложения придётся корректировать в любом случае:

  • Старая триггерная функция tsearch2 могла принимать в списке аргументов имена функций, вызываемых с текстовыми данными до того, как они были преобразованы в формат tsvector. Эта возможность была ликвидирована как угроза безопасности, так как нельзя гарантировать, что вызываться будет именно запланированная функция. Если данные нужно как-то обработать перед индексацией, рекомендуется написать дополнительный триггер, который будет делать это сам.

  • Информация о конфигурации текстового поиска была перенесена в системные каталоги, которые значительно отличаются от таблиц аналогичного предназначения в tsearch2. Все приложения, анализирующие или модифицирующие эти таблицы, нуждаются в корректировке.

  • Ели приложение использует какие-либо нестандартные конфигурации текстового поиска, их нужно будет настроить в системных каталогах, применив новые SQL-команды конфигурирования текстового поиска. Модуль замены tsearch2 предлагает небольшую помощь в этом, позволяя загружать старый набор конфигурационных таблиц tsearch2 в PostgreSQL 8.3. (Без этого модуля загрузить данные конфигурации невозможно, так как значения в столбцах regprocedure нельзя сопоставить с функциями.) Эти таблицы конфигурации на самом деле не будут ничего делать, но их содержимое будет полезно хотя бы для того, чтобы получить аналогичную конфигурацию в 8.3.

  • Старые функции reset_tsearch() и get_covers() не поддерживаются.

  • Модуль замены tsearch2 не определяет никакие псевдонимы операторов, полностью рассчитывая на встроенные. Это может вызвать проблемы, если в приложении использовались имена операторов с явным указанием схемы, что встречается очень редко.

F.56.2. Преобразование инсталляции версии до 8.3

Обновлять инсталляцию версии до 8.3, в которой использовалось расширение tsearch2, рекомендуется следующим образом:

  1. Выгрузите данные старой инсталляции обычным способом, не используя ключ -c (--clean) программы pg_dump или pg_dumpall.

  2. В новой инсталляции создайте пустые базы данных и установите модуль замены tsearch2 в каждую базу, где будет использоваться текстовый поиск. Это нужно сделать до загрузки данных в базу! Если в старой инсталляции объекты tsearch2 содержались в схеме, отличной от public, обязательно отразите это в команде CREATE EXTENSION, чтобы заменяющие объекты создавались в той же схеме.

  3. Загрузите выгруженные данные. При этом могут возникнуть ошибки из-за невозможности воссоздать первоначальные объекты tsearch2. Хотя их можно игнорировать, это значит, что вы не сможете восстановить выгруженные данные в одной транзакции (то есть, нельзя использовать ключ -1 команды pg_restore).

  4. Изучите содержимое восстановленных конфигурационных таблиц tsearch2 (pg_ts_cfg и т. д.) и создайте аналогичные конфигурации текстового поиска по потребности. Получив из старых конфигурационных таблиц всю полезную информацию, вы можете удалить их.

  5. Протестируйте работу приложения.

Позже вы можете поменять ссылки в приложении на псевдонимы объектов текстового поиска, что позволит в конце концов удалить модуль замены tsearch2.

F.56.3. Ссылки

Сайт разработки Tsearch2 http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy