PostgreSQL从9.6升级到11后pgtap扩展缺失问题求助
解决PostgreSQL 11升级后pgTap扩展找不到控制文件的问题
你遇到的核心问题是apt包管理器在重装pgTap时,默认关联了系统中仍存在的PostgreSQL 9.6版本,导致扩展文件始终安装在旧版本目录下,没有同步到11的对应路径。下面是针对性的解决步骤:
方法一:指定PostgreSQL 11版本安装pgTap(推荐)
这是最规范的解决方式,能避免手动操作带来的兼容性风险:
- 先检查系统是否有PostgreSQL 11对应的pgTap包:
apt-cache search postgresql-11-pgtap - 如果搜索到结果,直接安装对应包:
sudo apt-get install postgresql-11-pgtap - 若搜索不到,需要先添加PostgreSQL官方源(适配Debian/Ubuntu系发行版):
- 导入官方GPG密钥:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - - 添加源到apt列表(以Ubuntu 18.04为例,其他版本替换
bionic为对应发行版代号):echo "deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list - 更新缓存后再安装:
sudo apt-get update sudo apt-get install postgresql-11-pgtap
- 导入官方GPG密钥:
方法二:手动迁移pgTap文件到PostgreSQL 11目录(应急方案)
如果暂时无法通过包管理安装对应版本,可以手动复制文件(注意:此方式可能存在版本适配风险,仅作为临时解决手段):
- 复制所有pgTap相关文件到11版本的扩展目录:
sudo cp /usr/share/postgresql/9.6/extension/pgtap* /usr/share/postgresql/11/extension/ - 调整文件权限,确保PostgreSQL进程可读取:
sudo chown postgres:postgres /usr/share/postgresql/11/extension/pgtap* sudo chmod 644 /usr/share/postgresql/11/extension/pgtap* - 进入PostgreSQL 11的目标数据库,重新创建扩展:
CREATE EXTENSION IF NOT EXISTS pgtap;
验证与后续优化
- 安装完成后,执行以下SQL确认扩展状态:
若返回有效记录,说明扩展已正确安装,此时再尝试恢复数据库即可正常进行。SELECT extname, extversion FROM pg_extension WHERE extname = 'pgtap'; - 若不再需要PostgreSQL 9.6,建议彻底卸载相关包,避免包管理器后续默认关联旧版本:
sudo apt-get purge --auto-remove postgresql-9.6 postgresql-client-9.6
内容的提问来源于stack exchange,提问作者DatabaseShouter
相关产品推荐
相关产品推荐

