前言
清理前(104G)
清理后(29G)
普通安装
手动清理
执行查询
/usr/lib/postgresql/12/bin/pg_controldata /var/lib/postgresql/12/main/
说明:/usr/lib/postgresql/12/bin/pg_controldata 为 pg_controldata 安装路径
/var/lib/postgresql/12/main/ 是pgsql的数据目录
执行后输出:
执行
/usr/lib/postgresql/12/bin/pg_archivecleanup -d /var/lib/postgresql/12/main/pg_wal 000000010000001300000000
说明:是pg_archivecleanup 和pgsql数据目录下的/pg_wal 文件夹,000000010000001300000000为上面查询的
通过脚本清理
#!/bin/bash
# 提取 WAL 文件名
latest_wal=$(/usr/lib/postgresql/12/bin/pg_controldata /var/lib/postgresql/12/main/ | grep "Latest checkpoint's REDO WAL file" | awk '{print $NF}')
# 确认提取的 WAL 文件名
echo "Latest WAL file: $latest_wal"
# 执行 pg_archivecleanup
/usr/lib/postgresql/12/bin/pg_archivecleanup -d /var/lib/postgresql/12/main/pg_wal $latest_wal
docker安装
说明
docker 安装步骤一样 只是命令不一样
手动清理
docker exec postgresql /usr/lib/postgresql/12/bin/pg_controldata /var/lib/postgresql/12/main/
docker exec postgresql /usr/lib/postgresql/12/bin/pg_archivecleanup -d /var/lib/postgresql/12/main/pg_wal 000000010000001300000000
脚本清理
#!/bin/bash
# 提取 WAL 文件名
latest_wal=$(docker exec postgresql /usr/lib/postgresql/12/bin/pg_controldata /var/lib/postgresql/12/main/ | grep "Latest checkpoint's REDO WAL file" | awk '{print $NF}')
# 确认提取的 WAL 文件名
echo "Latest WAL file: $latest_wal"
# 执行 pg_archivecleanup
docker exec postgresql /usr/lib/postgresql/12/bin/pg_archivecleanup -d /var/lib/postgresql/12/main/pg_wal $latest_wal
设置定时执行脚本
授权脚本
chmod +x pgsql_clear.sh
设置定时任务
crontab -e
插入定时任务
0 2 * * 1 /root/base/postgresql/sh/pgsql_clear.sh
这里设置的是每周一凌晨两点执行脚本,执行时间自己定