PostgreSQL创建.syn同义词词典报错:无效文本搜索配置文件名
解决PostgreSQL 16同义词词典.syn文件无法访问的问题
核心规则
PostgreSQL同义词词典的.syn文件必须满足两个硬性要求:
- 必须存放在PostgreSQL安装目录下的
share/tsearch_data文件夹(Windows默认路径为C:\Program Files\PostgreSQL\16\share\tsearch_data); - 文件权限需允许PostgreSQL服务用户读取。
分步解决操作
1. 规范.syn文件的位置与格式
- 将
am56314Syn.syn移动到C:\Program Files\PostgreSQL\16\share\tsearch_data目录下; - 检查文件格式:每行一组同义词映射,格式为
原词 同义词,支持多同义词用空格分隔,示例:
文件编码需为UTF-8(无BOM),避免特殊字符或异常换行。苹果 红富士 平安果 电脑 计算机 PC
2. 设置正确的文件权限
PostgreSQL服务默认使用NT SERVICE\postgresql-x64-16用户运行(可在系统服务管理器中确认具体名称),需给该用户配置读取权限:
- 右键
tsearch_data文件夹 → 属性 → 安全 → 编辑 → 添加; - 输入
NT SERVICE\postgresql-x64-16→ 点击「检查名称」确认用户存在 → 确定; - 给该用户勾选读取和执行权限,应用到文件夹及所有子文件。
3. 正确创建同义词词典
创建词典时,SYNONYMS参数仅需填写文件名,PostgreSQL会自动在tsearch_data目录下查找,无需指定全路径:
CREATE TEXT SEARCH DICTIONARY am56314syn ( TEMPLATE = pg_catalog.synonym, SYNONYMS = 'am56314Syn.syn' );
4. 验证词典功能
用ts_lexize函数测试同义词替换是否生效:
SELECT ts_lexize('am56314syn', '苹果');
若返回{红富士,平安果}则说明词典正常工作。
错误原因解析
- 你之前使用绝对路径指定
.syn文件,PostgreSQL出于安全限制,不允许直接引用tsearch_data目录外的文件,也不支持全路径引用该目录内的文件; - 用
simple模板创建的是无同义词替换功能的基础词典,因此ALTER语句能执行,但无法实现同义词替换需求。
内容的提问来源于stack exchange,提问作者Arthur Maurer
相关产品推荐
相关产品推荐

