在macos上配置postgresql定期备份需先启用wal归档(设wal_level=replica、archive_mode=on、archive_command),再选pg_dump+cron或databasus实现自动化;注意权限、路径、密码认证及定期恢复验证。
在 macos 上配置支持自动化定期备份的 postgresql 数据库,核心是两步:确保数据库启用了归档模式(wal 归档),再搭配调度工具或专用工具执行周期性备份。不依赖云服务或图形界面也能稳定运行,关键是配置到位、路径清晰、权限正确。
启用 WAL 归档(必需前提)
PostgreSQL 的自动增量备份和时间点恢复(PITR)依赖 WAL(Write-Ahead Logging)归档功能。默认关闭,需手动开启:
- 定位配置文件:
<postgresql_installdir>/data/postgresql.conf</postgresql_installdir>(Homebrew 安装通常为/opt/homebrew/var/postgres/postgresql.conf;Postgres.app 在~/Library/Application Support/Postgres/var-*/下) - 编辑以下三项(取消注释并设值):
-
wal_level = replica(或archive,新版推荐replica) archive_mode = on-
archive_command = 'cp %p /path/to/wal/archive/%f'(示例:用cp复制到本地目录,确保目标目录存在且 PostgreSQL 用户有写入权限)
-
- 保存后重启服务:
pg_ctl -D /opt/homebrew/var/postgres restart(Homebrew)或通过 Postgres.app 界面重启 - 验证是否生效:
psql -c "SHOW wal_level; SHOW archive_mode;",输出应为replica和on
选择并部署备份方式
根据使用习惯和运维需求,选一种即可。无需全部配置:
利用 macOS 原生能力实现本地语音识别与合成。通过 yap (Apple Speech.framework) 进行语音转文字,通过 say + ffmpeg 进行文字转语音。完全离线,无需 API 密钥。具备音质检测与智能选声功能。
-
方案一:用 pg_dump + cron(轻量、原生、易调试)
写一个 shell 脚本(如backup-pg.sh):#!/bin/bash PGPASSWORD="your_pass" pg_dump -h localhost -U your_user -F c -b -v -f "/backup/pg_$(date +\%Y\%m\%d_\%H\%M).dump" your_db_name
- 赋予执行权限:
chmod +x backup-pg.sh - 添加到 crontab:
crontab -e,加入行(例如每天凌晨2点):0 2 * * * /path/to/backup-pg.sh >/dev/null 2>&1 - 注意:若用 Homebrew 安装,确保 cron 环境能识别
pg_dump,可加export PATH="/opt/homebrew/bin:$PATH"到脚本开头
- 赋予执行权限:
-
方案二:用 Databasus(图形化、多策略、带加密)
适合希望统一管理多个数据库或需要云存储(S3/Google Drive)的用户:- 安装 Docker 后执行:
git clone https://gitcode.com/gh_mirrors/po/postgresus && cd postgresus && chmod +x install-databasus.sh && ./install-databasus.sh - 访问
http://localhost:8080,登录后添加 PostgreSQL 连接,设置 hourly/daily 备份频率与保留天数 - 优势:自动清理旧备份、支持加密、失败通知、一键恢复
- 安装 Docker 后执行:
安全与维护建议
避免备份失效或恢复失败,这几个细节常被忽略:
- 备份路径必须由 PostgreSQL 进程所属用户(如
postgres或当前 macOS 用户)可读写;不要放在 iCloud 同步目录或加密磁盘中 - 定期测试恢复流程:用
pg_restore -C -d postgres backup.dump验证备份文件可读、结构完整 - WAL 归档目录需单独监控空间——它会持续增长,建议配合
find /path/to/wal/archive -mtime +7 -delete清理旧日志 - 若使用 Postgres.app,初始化时默认认证为
trust,请改用scram-sha-256并设密码,否则脚本中无法免密连接










