介绍

适用于: Azure Database for PostgreSQL 灵活服务器

Azure Database for PostgreSQL 灵活服务器支持 PostgreSQL 版本 17(预览版)、16、15、14、13、12 和 11。 Postgres 社区约每年发布一次包含新功能的新主版本。 此外,每个主版本会定期收到 bug 修复(以次要版本的形式)。 次要版本升级包含向后兼容现有应用程序的更改。 Azure Database for PostgreSQL 灵活服器务在客户的维护时段内定期更新次要版本。

主版本升级比次要版本升级复杂得多。 其中可能包括有可能不向后兼容已发布的应用程序的内部更改和新功能。

Azure Database for PostgreSQL 灵活服务器 Postgres 有一项功能,只需单击一下即可对服务器执行就地升级。 此功能通过最大程度减少对访问服务器的用户和应用程序的中断来简化升级过程。

就地升级在主版本升级后会保留当前服务器的服务器名称和其他设置。 升级过程中不需要进行数据迁移或更改应用程序连接字符串。 与数据迁移相比,就地升级速度更快,故障时间更短。

升级过程

下面是主版本就地升级的一些重要注意事项:

  • 在就地主版本升级过程中,Azure Database for PostgreSQL 灵活服务器运行预检查过程来识别可能导致升级失败的任何潜在问题。
    • 如果预检查发现任何不兼容性问题,它会创建日志事件,其中将显示升级预检查失败以及错误消息。
    • 如果预检查成功,Azure Database for PostgreSQL 灵活服务器会在开始升级之前停止该服务并执行隐式备份。 如果出现升级错误,该服务会使用此备份将数据库实例还原到其以前的版本。
  • Azure Database for PostgreSQL 灵活服务器使用 pg_upgrade 工具执行就地主版本升级。 使用该服务时可灵活跳过中间版本,直接升级到更新版本。
  • 在为实现高可用性 (HA) 启用的服务器进行主版本就地升级期间,该服务会禁用 HA,在主服务器上执行升级,然后在升级完成后重新启用 HA。
  • 大多数扩展会在主版本就地升级期间自动升级到更高版本,但存在一些例外情况
  • Azure Database for PostgreSQL 灵活服务器的主版本就地升级过程会自动部署受支持的最新次要版本。
  • 就地主版本升级是会导致短暂停机的离线操作。 停机时间通常少于 15 分钟。 所需时间可能会有所不同,具体取决于涉及的系统表数。
  • 升级前事务长时间运行或工作负载高可能会增加关闭数据库所需的时间和升级时间。
  • 主版本就地升级成功后,无法自动还原到早期版本。 但你可以执行时间点还原 (PITR),恢复到升级之前的某个时间,从而还原以前版本的数据库实例。
  • Azure Database for PostgreSQL 灵活服务器在升级期间拍摄数据库的快照。 在升级开始之前创建快照。 如果升级失败,系统会自动将数据库从快照还原到其状态。
  • PostgreSQL 16 引入了基于角色的安全性措施。 在 Azure Database for PostgreSQL 灵活服务器上进行主版本升级后,在服务器上创建的第一个用户(被授予 ADMIN 选项)现在将拥有管理权限,用于执行基本维护操作的其他角色。

查看升级日志

主版本升级日志 (PG_Upgrade_Logs) 提供对详细服务器日志的直接访问。 将 PG_Upgrade_Logs 集成到升级过程中有助于确保更顺利、更透明地过渡到新的 PostgreSQL 版本。

可以使用服务器参数以与上面的服务器日志相同的方式配置主版本升级日志:

  • 若要启用该功能,请将 logfiles.download_enable 设置为 ON
  • 若要以天为单位定义日志文件的保留期,可使用 logfiles.retention_days

设置升级日志

若要开始使用 PG_Upgrade_Logs,可以配置 PostgreSQL 服务器日志和主版本升级日志的捕获

可以通过服务器日志的 UI 来访问升级日志。 在那里,可以实时监视 PostgreSQL 主版本升级的进度和详细信息。 此 UI 提供用于查看日志的集中位置,用户可以更轻松地跟踪升级过程和排查相关问题。

升级日志的优点

  • 见解诊断PG_Upgrade_Logs 提供有关升级过程的宝贵见解。 它捕获有关所执行的操作的详细信息,并凸显任何发生的错误或收到的警告。 此级别的详细信息有助于诊断和解决升级期间可能出现的问题,确保更顺利地完成过渡。
  • 简化的故障排除:通过直接访问这些日志,可以快速识别和解决潜在的升级障碍,从而减少停机时间并最大限度地减少对操作的影响。 日志是一个重要的故障排除具,可以更高效且有效地解决问题。

升级注意事项和限制

如果在就地进行的主要版本升级期间预检查操作失败,升级会被阻止,并显示详细的错误消息。 下面是可能导致升级失败或行为意外的已知限制:

不支持的服务器配置

  • 就地升级期间不支持只读副本。 在升级主服务器之前,必须删除读取副本。 升级后,可以重新创建副本。
  • 网络流量规则可能会阻止升级操作。
    • 确保灵活服务器可以在其虚拟网络中的端口 5432 和 6432 上发送/接收流量,以及发送到 Azure 存储(用于日志存档)。
    • 如果网络安全组(NSG)限制此流量,HA 将不会在升级后自动重新启用。 可能需要手动更新 NSG 规则并重新启用 HA。
  • 就地主要版本升级期间不支持逻辑复制槽。
  • 使用 SSDv2 存储的服务器不符合主要版本升级的条件。
  • 在主版本升级期间,不支持依赖于 pg_stat_activity 的视图。

扩展限制

就地主要版本升级不支持所有 PostgreSQL 扩展。 如果找到不支持的扩展,升级将在预检查期间失败。

  • 任何 PostgreSQL 版本都不支持以下扩展:timescaledb、、、pgauditdblinkorafce、、 pg_partmanpostgres_fdw
  • 当升级目标为 PostgreSQL 16 或更高版本时,不支持以下扩展: pgrouting
  • 升级到 PostgreSQL 17 时不支持以下扩展:pgrouting、、ageazure_aihllpg_diskann

在升级之前,必须从 azure.extensions 服务器参数中删除这些扩展。 如果存在,将阻止升级。

特定于 PostGIS 的注意事项

如果使用 PostGIS 或任何依赖扩展,则必须配置search_path服务器参数以包括:

  • 与 PostGIS 相关的架构
  • 依赖扩展,包括:postgispostgis_rasterpostgis_sfcgalpostgis_tiger_geocoderpostgis_topologyaddress_standardizeraddress_standardizer_data_usfuzzystrmatch

无法正确配置search_path可能会导致升级失败或升级后对象损坏。

升级后

主版本升级完成后,建议在每个数据库中运行 ANALYZE 命令以刷新 pg_statistic 表。 缺少或过时的统计信息可能会导致查询计划不佳,这反过来可能会降低性能并占用过多的内存。

postgres=> analyze;
ANALYZE

注释

自动迁移的服务器上支持主版本就地升级。 在自动迁移的服务器上成功完成就地重大版本升级后,将不再支持 用户名格式username@servername。 相反,必须使用标准格式: 用户名。 若要避免身份验证问题,请仔细查看和更新应用程序和脚本中的所有连接字符串,以确保他们在升级后使用更新的用户名格式。