天天看点

postgresql如何升级版本

小版本升级

小版本升级不会改变内部的存储格式,因此总是和大版本兼容。例如,PostgreSQL 12.4 和 PostgreSQL 12.0 以及后续的 PostgreSQL 12.x 兼容。对于这些兼容版本的升级非常简单,只需要关闭数据库服务,安装替换二进制的可执行文件,重新启动服务即可。

大版本升级

官方提供三种方式

  1. Upgrading Data via pg_dumpall,使用 pg_dumpall / pg_restore 进行升级
  2. Upgrading Data via pg_upgrade,使用 pg_upgrade 进行升级
  3. Upgrading Data via Replication,使用逻辑复制进行升级

pg_dump方式

首先是最原始的pg_dump的方式,可以使用unix pipe,也可以使用-j 并行的方式,不过得配合pg_restore,需要额外去备份一些全局的信息如用户和表空间等。

sudo -u postgres pg_dump -h /path/to/old/instance.sock | sudo -u postgres psql -h /path/to/new/instance.sock      

pg_dumpall

pg_dumpall的优势在于,可以导出全局的对象,如用户、表空间、全局的一些权限信息等等,所以相较于pg_dump就不需要导出用户信息等全局信息这一步骤了,不过不支持 -j并行,和pg_dump的步骤十分类似。

pg_upgrade方式

pg_upgrade是官方提供的一个升级工具,执行升级之前,需要使用 -c 或者 --check选项,进行升级前的兼容性检查, 可以发现插件、数据类型不兼容等问题。不过需要注意的是,源端和目标端的编译参数、segsize、walsegsize等等得是一样的,可以使用pg_config查看源端的编译参数。

逻辑复制方式

PostgreSQL 逻辑复制支持跨版本之间的数据复制,而且支持不同平台之间的复制,因此也可以用于实现版本升级。我们可以安装一个新版本的数据库作为复制的从节点,当数据已经同步时执行一次主从切换,然后关闭旧版本的主节点。主从切换的升级方法通常只需要几秒钟就能完成,利用第三方高可用组件甚至可以实现零停机时间升级。