PostgreSQL自定义扩展更新异常:删后重建仍为旧版本咨询
PostgreSQL自定义扩展更新失败问题排查与解决
不需要清理PostgreSQL缓存,你的问题根源在于扩展版本升级机制配置缺失,以及操作流程存在疏漏,以下是具体排查和解决步骤:
1. 确认扩展版本配置文件与升级脚本
- 检查新的
extension.control文件,确保default_version = '1.1'配置正确。 - PostgreSQL识别扩展升级路径依赖版本过渡脚本,你需要创建
extension--1.0--1.1.sql脚本,放在/share/postgresql/13/extension/目录下,脚本内写清楚从1.0升级到1.1需要执行的所有修改(比如替换旧函数、新增对象等)。没有这个脚本,ALTER EXTENSION ... UPDATE就会提示无升级路径。
2. 彻底清理旧扩展残留
- 执行
DROP EXTENSION IF EXISTS extension CASCADE;后,务必确认数据库内无残留:- 用
SELECT * FROM pg_extension WHERE extname = 'extension';检查扩展是否已完全删除; - 用
SELECT proname FROM pg_proc WHERE pronamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'test');查看test schema下是否还有旧函数。
- 用
- 若有残留,手动删除相关对象后再进行后续操作。
3. 替换文件后重载数据库配置
- 替换扩展文件后,必须执行
SELECT pg_reload_conf();让PostgreSQL重新加载扩展配置,或者直接重启PostgreSQL服务,确保新的control文件和SQL脚本被读取。直接复制文件后重建,数据库可能仍使用旧的元数据缓存。
4. 修正后的完整操作流程
- (可选,更稳妥)停止PostgreSQL服务;
- 删除目标目录下所有旧扩展文件:
rm /share/postgresql/13/extension/extension*; - 复制新的
extension.control、extension--1.1.sql以及extension--1.0--1.1.sql升级脚本到/share/postgresql/13/extension/; - (若之前停止)启动PostgreSQL服务;
- 执行
DROP EXTENSION IF EXISTS extension CASCADE;; - 执行
CREATE EXTENSION extension SCHEMA test;; - 用
SELECT extversion FROM pg_extension WHERE extname = 'extension';确认版本已更新为1.1。
内容的提问来源于stack exchange,提问作者Jose Lopez
相关产品推荐
相关产品推荐

