UAT 环境,发现服务应用 PG 库里拿出来的时间是错误的,所以产生诉求:修改 PG 数据库的时区
线上使用 K8s 部署(单 Node 单 Pod)bitnami PostgreSQL 14 版本数据库,修改方式非常简单,在 Web UI 中添加 POSTGRESQL_TIMEZONE 和 POSTGRESQL_LOG_TIMEZONE 配置参数(值均为 PRC,PG 对中国时区的定义),重启
由于线上有大量的数据在不断写入,PG 重启的过程中有 Pod 被 K8s 强制关闭,这个时间点有 Insert 语句的数据直接先落入到 redo 日志,还未落盘,同时这个数据是不完整的
K8s 无法正常拉起 PG 的 Pod,进入无限 Error 重启阶段
由于 UAT 环境的数据量大且类生产环境,所以数据也是非常重要,不可丢失。
根据错误日志可以判断是重启执行 redo 日志的时候失败了
在 Google 可以找到修复方式,以 10 版本为界限,可以使用 pg_resetxlog 或 pg_resetwal(10 以后版本) 命令对 PG 的 data 文件夹进行修复
小细节:不管做什么尝试手段,第一步一定是对出现问题以后的 data 目录进行打包封存,可用于多次的修复尝试,不然就没有回头路了