内容提要
Postgres数据库每五年需进行一次重大升级。使用pg_upgrade工具可快速迁移至新版本。升级步骤包括测试应用、安装新版本、创建新集群、运行检查、备份数据、升级主服务器及其副本。确保配置文件正确,并在新集群中启用页级校验和。完成后,生成统计信息并更新扩展,定期备份以准备下次升级。
延伸解读
升级前的关键检查:兼容性与校验和
运行pg_upgrade --check是升级前必不可少的步骤,它能提前发现新旧集群的不兼容问题。常见错误是旧集群未启用数据校验和而新集群启用了,此时需删除新数据目录并重新运行initdb,且不要使用--data-checksums参数。校验和可以稍后通过pg_checksums启用,但需重写所有文件,耗时较长。
升级耗时与表数量的关系
使用--link模式时,pg_upgrade的耗时主要取决于数据目录中的文件数量,而文件数量与表数量直接相关。根据测试,每增加一万张表,升级时间约增加一分钟。例如,12.8万张表约需7秒,而20万张表则需22分钟。实际耗时因操作系统和硬件而异,但可通过创建测试表来估算。
升级后的必要操作:统计信息与扩展
pg_upgrade不会迁移优化器统计信息,因此升级后必须运行vacuumdb --all --analyze-in-stages来分阶段生成统计信息,以确保查询计划的质量。同时,扩展可能需要更新,可使用ALTER EXTENSION命令或执行pg_upgrade生成的update_extensions.sql文件。检查扩展版本差异的查询为:SELECT * FROM pg_available_extensions WHERE default_version <> installed_version;
副本升级与配置调整
流复制副本无法直接运行pg_upgrade,需在主库升级后,按照官方文档步骤11使用rsync同步。升级前需备份副本数据目录中的配置文件。新集群的postgresql.conf、pg_hba.conf等文件为默认配置,需从旧集群复制并调整,特别注意postgresql.auto.conf和include选项引用的文件。
Q&A
Postgres数据库的升级周期是多久?
Postgres数据库每五年需进行一次重大升级。
如何使用pg_upgrade工具进行Postgres升级?
使用pg_upgrade工具可以快速迁移至新版本,步骤包括测试应用、安装新版本、创建新集群、运行检查、备份数据和升级主服务器及其副本。
在升级Postgres之前需要做哪些准备?
在升级之前,需要测试应用、安装新版本、创建新集群并备份数据。
pg_upgrade工具的--link选项有什么作用?
使用--link选项可以创建旧数据文件和新数据文件之间的硬链接,从而加快升级速度。
如何确保Postgres升级后集群的兼容性?
可以通过运行pg_upgrade的--check参数来确保集群的兼容性,检查是否存在不兼容的地方。
升级Postgres后如何生成统计信息?
升级后可以使用vacuumdb命令生成统计信息,建议分阶段进行以提高效率。