You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postgres是否存在单复数转换扩展?无需维护转换表

Postgres 实现单复数词汇转换的可用扩展

官方Postgres核心没有内置专门的单复数转换扩展,但有几种现成方案可以替代自己维护词汇表:

  • 自定义规则函数(结合基础Postgres功能)
    不需要额外安装扩展,直接写PL/pgSQL函数覆盖英文常见单复数规则,比如:
CREATE OR REPLACE FUNCTION pluralize(text) RETURNS text AS $$
BEGIN
  -- 处理以非元音+y结尾的词(如baby→babies)
  IF lower($1) LIKE '%y' AND lower($1) NOT LIKE '%[aeiou]y' THEN
    RETURN substr($1, 1, length($1)-1) || 'ies';
  -- 处理s/x/z/ch/sh结尾的词(如box→boxes)
  ELSIF lower($1) LIKE '%s' OR lower($1) LIKE '%x' OR lower($1) LIKE '%z' OR lower($1) LIKE '%ch' OR lower($1) LIKE '%sh' THEN
    RETURN $1 || 'es';
  -- 处理f/fe结尾的词(如wolf→wolves)
  ELSIF lower($1) LIKE '%f' THEN
    RETURN substr($1, 1, length($1)-1) || 'ves';
  ELSIF lower($1) LIKE '%fe' THEN
    RETURN substr($1, 1, length($1)-2) || 'ves';
  -- 其他情况直接加s
  ELSE
    RETURN $1 || 's';
  END IF;
END;
$$ LANGUAGE plpgsql IMMUTABLE;

这个函数能处理大部分常规单复数转换,适合基础场景,不用依赖外部扩展。

  • pg_inflector 扩展
    你之前提到找不到可用版本,但社区确实有维护这个扩展——它基于Ruby的Inflector库,支持不规则词汇转换(比如child→children、foot→feet这类特殊情况)。需要通过源码编译安装,安装后就能直接调用pluralize()和singularize()函数,处理复杂场景更省心。

  • 全文检索词干处理(tsvector)
    如果你的需求和全文检索相关,Postgres的tsvector功能自带词干提取,但这不是严格的单复数转换,只是把词汇还原到词干形式(比如running→run),适合检索场景,不适合精确的词汇单复数转换。

总结:如果不想折腾第三方扩展,自定义规则函数是最快的方案;要是需要处理大量不规则词汇,pg_inflector更合适。

内容的提问来源于stack exchange,提问作者Matthys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:30:05