一.PG启动失败

1.查看 pg_log, 磁盘空间不够

主要是 根 目录 与 $PGDATA 目录

2.权限异常

PG软件安装路径 ,确保onwer 与 group 都是 postgres
PG 数据库路径 700, 确保onwer 与 group 都是 postgres
PG 日志路径 , 确保 onwer 与 group 都是 postgres

3.could not locate a valid checkpoint record

PG维护笔记_恢复数据


实际环境可能日志打印上下文可能不一定完全相同, 主要是查看是否有这句

could not locate a valide checkpoint record

  • 解决方法
su - postgres
pg_resetwal -f $PGDATA

4.报错Could not open file pg_xact/0E97

cd $PGDATA/pg_xact
dd if=/dev/zero of=0E97 bs=256k count=1

5.查看 pg_log下最新日志文件中的报错信息,如果看到下面的信息

replication checkpoint has wrong magic xxx instead of xxxx

  • 解决方法:
mkdir -p /bak
mv -f /mnt/syncdata/pgsql/data/pg_logical/replorigin_checkpoint /bak
pgsql_ctl start

如果 PG 可以启动; 启动之后, reindex 一下 imos 库

  • 连接 imos 库
    /home/postgres/pgsql/bin/psql -Upostgres -d imos
  • 执行如下两个 命令
    set maintenance_work_mem to ‘1GB’;
    reindex database imos;
  • 重启整个服务
  • 检查基本业务功能

6.如果最终还是无法启动, 可以初始化一个空的数据库,然后重新手动恢复数据库

二. PG 启动成功,但是运行日志中报错

1.报错 unexpected chunk number 1 (expected 0 ) for toast value xx in pg_toast_xx

ERROR:  unexpected chunk size 1996 (expected 1585) in final chunk 0 for toast value
114925100in pg_toast_10920100
  • 连接数据库
  • 执行如下SQL, 获取10920100 对应的表名称
    select 10920100 ::regclass ;
  • 整理表
    REINDEX TABLE pg_toast.pg_toast_10920100;
    REINDEX TABLE <name of table 10920100>;
    vacuum full pg_toast.pg_toast_10920100;
    vacuum full <name of table 10920100>;
  • 重启服务, 如果PG日志中还是报错上面错误,则可以手动备份一下数据库, 然后恢复数据库,如果手动备份数据库报错, 请使用每日备份数据库来恢复;