更新扩展
升级 PostgreSQL 扩展版本
扩展更新涉及两个层面:软件包更新(操作系统层面)和扩展对象更新(数据库层面)。
更新软件包
使用包管理器更新扩展的软件包:
# EL 系统
sudo yum update pgvector_18*
# Debian/Ubuntu 系统
sudo apt update && sudo apt upgrade postgresql-18-pgvector
使用 Pigsty 批量更新:
# 更新指定集群的扩展包
./pgsql.yml -l pg-meta -t pg_extension -e '{"pg_extensions":["pgvector"]}'
# 使用 pig 包管理器
pig update pgvector
更新扩展对象
软件包更新后,数据库中的扩展对象可能需要同步更新。
查看可更新的扩展
-- 查看已安装扩展及其版本
SELECT name, default_version, installed_version
FROM pg_available_extensions
WHERE installed_version IS NOT NULL;
-- 查看可升级的扩展
SELECT name, installed_version, default_version
FROM pg_available_extensions
WHERE installed_version IS NOT NULL
AND installed_version <> default_version;
执行扩展更新
-- 更新到最新版本
ALTER EXTENSION pgvector UPDATE;
-- 更新到指定版本
ALTER EXTENSION pgvector UPDATE TO '0.8.0';
查看更新路径
-- 查看扩展的可用升级路径
SELECT * FROM pg_extension_update_paths('pgvector');
注意事项
备份优先:更新扩展前建议先备份数据库,特别是涉及数据类型变更的扩展。
检查兼容性:某些扩展的大版本升级可能不兼容,需查阅扩展的升级文档。
预加载扩展:如果更新的是需要预加载的扩展(如
timescaledb),更新后可能需要重启数据库。依赖关系:如果其他扩展依赖于被更新的扩展,需要按依赖顺序更新。
复制环境:在主从复制环境中,应先在从库测试更新,确认无误后再更新主库。
常见问题
更新失败
如果 ALTER EXTENSION UPDATE 失败,可能是因为:
- 没有可用的升级路径
- 扩展正在被使用
- 权限不足
-- 查看扩展依赖
SELECT * FROM pg_depend WHERE refobjid = (SELECT oid FROM pg_extension WHERE extname = 'pgvector');
回滚更新
PostgreSQL 扩展通常不支持直接回滚。如需回滚:
- 从备份恢复
- 或者:卸载新版本扩展,安装旧版本软件包,重新创建扩展