Документация по PostgreSQL 9.4.1 | |||
---|---|---|---|
Пред. | Уровень выше | Приложение E. Дополнительно поставляемые модули | След. |
E.42. tsearch2
Модуль tsearch2 предоставляет функциональность текстового поиска для обратной совместимости с приложениями, которые использовали tsearch2 до того, как текстовый поиск был интегрирован в ядро PostgreSQL в версии 8.3.
E.42.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 не определяет никакие псевдонимы операторов, полностью рассчитывая на встроенные. Это может вызвать проблемы, если в приложении использовались имена операторов с явным указанием схемы, что встречается очень редко.
E.42.2. Преобразование инсталляции версии до 8.3
Обновлять инсталляцию версии до 8.3, в которой использовалось расширение tsearch2, рекомендуется следующим образом:
Выгрузите данные старой инсталляции обычным способом, не используя ключ -c (--clean) программы pg_dump или pg_dumpall.
В новой инсталляции создайте пустые базы данных и установите модуль замены tsearch2 в каждую базу, где будет использоваться текстовый поиск. Это нужно сделать до загрузки данных в базу! Если в старой инсталляции объекты tsearch2 содержались в схеме, отличной от public, обязательно отразите это в команде CREATE EXTENSION, чтобы заменяющие объекты создавались в той же схеме.
Загрузите выгруженные данные. При этом могут возникнуть ошибки из-за невозможности воссоздать первоначальные объекты tsearch2. Хотя их можно игнорировать, это значит, что вы не сможете восстановить выгруженные данные в одной транзакции (то есть, нельзя использовать ключ -1 команды pg_restore).
Изучите содержимое восстановленных конфигурационных таблиц tsearch2 (pg_ts_cfg и т. д.) и создайте аналогичные конфигурации текстового поиска по потребности. Получив из старых конфигурационных таблиц всю полезную информацию, вы можете удалить их.
Протестируйте работу приложения.
Позже вы можете поменять ссылки в приложении на псевдонимы объектов текстового поиска, что позволит в конце концов удалить модуль замены tsearch2.
E.42.3. Ссылки
Сайт разработки Tsearch2 http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/
Пред. | Начало | След. |
test_shm_mq | Уровень выше | unaccent |