选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.1 已于 2016 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页

F.43. tsearch2 #

tsearch2 模块为那些在文本搜索于 8.3 版集成进 PostgreSQL 核心之前使用过 tsearch2 的应用提供向后兼容的文本搜索功能。

F.43.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.43.2. 转换 8.3 之前的安装

更新一个使用 tsearch2 的 8.3 之前安装的推荐方法是:

  1. 按通常方式从旧安装中做一个转储,但务必不要使用 pg_dumppg_dumpall-c--clean)选项。

  2. 在新安装中创建空数据库,并将替代的 tsearch2 模块安装到 每个要使用文本搜索的数据库中。这必须在装载转储数据之前 完成!如果你的旧安装把 tsearch2 对象放在了 public 以外的模式中,请务必调整 CREATE EXTENSION 命令,使替代对象创建在同一模式中。

  3. 装载转储数据。由于无法重新创建原始的 tsearch2 对象,会报告相当多的错误。这些错误可以忽略,但这意味着你不能在单个事务中 恢复转储(例如,不能使用 pg_restore-1 开关)。

  4. 检查恢复出的 tsearch2 配置表 (pg_ts_cfg 等)的内容,并按需创建等效的内置 文本搜索配置。从中提取出所有有用信息之后,就可以删除旧的配置表。

  5. 测试你的应用。

之后你也许希望把应用中对别名文本搜索对象的引用改名,以便最终卸载替代的 tsearch2 模块。

F.43.3. 参考文献

Tsearch2 开发站点 http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。