天天看点

PG维护笔记

一.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下最新日志文件中的报错信息,如果看到下面的信息

  • 解决方法:
mkdir -p /bak
mv -f /mnt/syncdata/pgsql/data/pg_logical/replorigin_checkpoint /bak
pgsql_ctl start      
  • 连接 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日志中还是报错上面错误,则可以手动备份一下数据库, 然后恢复数据库,如果手动备份数据库报错, 请使用每日备份数据库来恢复;