windows上使用pg_upgrad升级postgres

一、背景

更新前使用的postgres版本是11版本,现将11 升级到13.4

二、更新步骤

需要说明的是,postgres升级和一般的软件升级有点不同,一般的软件升级都是直接进行升级,而postgres相当于是安装一个新版本,然后将旧版本的数据迁移到新版本中. 因为postgres部署在windows服务器上,所以相比于部署到linux服务器上更加的麻烦

1.下载13.4版本的postgres

2.停掉老版本的postgres,修改老版本的端口号 5432 改成5431  ;安装新版本的postgres( 如果不停掉老版本的postgres,新版本在安装时,端口会存在问题,安装过程其实是一个初始化过程,也可以使用命令去初始化),安装成功后停掉postgres服务(安装成功会自动注册到service中)

3.将两个版本的/data/pg_hba.conf文件设置为不需要密码(防止会报密码相关的错误)

 

host all all 127.0.0.1/32 trust

版本11  是将md5 改成trust 版本13 使用新的加密 是将scram-sha-256 改成trust 改完之后要重新启动一次服务,再停止。
4 修改两个程序的文件夹的权限为everyone 所有权限

 

 这一步必须

5 然后使用管理员启动cmd  (必须以管理员的方式启动)切换到13 的bin文件夹下

D:\Program Files\PostgreSQL\13\bin  ,然后执行升级程序命令

pg_upgrade -b "d:\Program Files\PostgreSQL\11\bin" -B "C:\Program Files\PostgreSQL\13\bin" -d "d:\Program Files\PostgreSQL\11\data" -D "d:\Program Files\PostgreSQL\13\data" -U postgres -p 5432 -P 5433
小写是原来版本的参数,大写是新版本的参数。
升级完成

三、遇到的问题以及解决
1.报错connection to database failed: fe_sendauth: no password supplied

这是由于需要密码认证导致的, 修改/data/pg_hba.conf文件,将md5改成trust即可

重点:把每一个md5 都要改成trust

2.报错The source cluster was not shut down cleanly.

这是由于postgres没有被完全关闭导致的,一般遇到的概率比较小,在关闭时可以使用如下命令即可

/pg_ctl.exe -D "d:\Program Files\PostgreSQL\13\data" stop -s -m fast

(个人建议升级前使用此命令关闭pg数据库)
3.权限问题

由于本次是在windows下更新postgres,所以还需要注册postgres用户,并给postgres用户相应的权限(也试过不创建用户,通过脚本来操作,但是貌似不行);所以建议大家按照官方文档来操作,我开始是使用 git base来按照linux命令来更新的,花了好多时间都没更新成功,最后还是按照官方文档来了,成功更新了

4.日志查看

在使用pg_upgrade命令进行更新时,会在执行命令的当前目录下产生四个日志文件,里面会存储报错信息,如果出现更新失败的话,就看下这四个日志文件,然后解决下错误即可

5.遇到报错“xx/data/base : No such file or directory”

这是由于执行命令的用户没有base目录的权限导致的,给该用户base目录权限即可解决问题

然后在新版本实例下删除过程中产生的一些无用文件即可,如
\data\pg_upgrade_output.d (文件夹)
\bin\delete_old_cluster.bat (文件)
\bin\update_extensions.sql (文件)

posted @   Thenext  阅读(1116)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示