PostgreSQL使用setweight()执行全文搜索时出现缓存查找失败错误
解决PostgreSQL 9.6.8中
cache lookup failed for function 3625错误 这个错误本质是PostgreSQL的系统缓存无法找到OID为3625的函数记录,通常出现在系统缓存与实际系统目录数据不一致的场景下——你单独执行单侧语句时缓存能正常加载,但拼接后触发了缓存的异常逻辑。下面是几个可尝试的解决步骤:
先定位出错的函数
先执行这条查询,明确OID 3625对应的具体函数:SELECT proname, prosrc, pronamespace::regnamespace FROM pg_proc WHERE oid = 3625;这能帮你确认是
setweight/to_tsvector这类文本搜索系统函数,还是自定义函数出现了异常。清空目标函数缓存
如果确认是系统函数的缓存问题,直接清空该函数的缓存再试:SELECT pg_clear_function_cache(3625);执行完成后重新运行你的UPDATE语句,看是否解决问题。
重启PostgreSQL服务
若清空单个函数缓存无效,彻底重启服务会重置所有系统缓存,重新加载系统目录数据。在Fedora 27上,针对PostgreSQL 9.6的重启命令是:sudo systemctl restart postgresql-9.6.service这是解决缓存不一致问题最直接的方法,多数这类奇怪的缓存异常重启后就能消失。
检查文本搜索配置完整性
虽然你单独执行语句没问题,但还是确认下french文本搜索配置是否正常存在:SELECT cfgname, cfgowner FROM pg_ts_config WHERE cfgname = 'french';若配置缺失,可能需要重新安装PostgreSQL的法语文本搜索相关包(Fedora上通常是
postgresql9.6-contrib类包,不过你单独能执行大概率是存在的,确认下更稳妥)。极端情况:修复系统目录
如果以上方法都无效,可能是系统目录存在损坏,可以尝试重新索引系统表:sudo -u postgres reindexdb --system your_database_name注意执行前请务必备份数据库。
内容的提问来源于stack exchange,提问作者corneliu
相关产品推荐
相关产品推荐

