为何执行git add后仍有部分Postgres相关文件未被暂存到Git仓库
问题解答
问题原因判断
你的推测完全正确,该现象确实由运行中的容器化Postgres实例导致:pg_stat_tmp目录存储Postgres运行时生成的临时统计数据,只要实例处于运行状态,就会持续写入、修改该目录下的文件。你执行git add ./暂存文件后,到Git输出状态检查结果的短暂间隔内,这些统计文件已经被Postgres再次修改,因此会显示为「未暂存的变更」。
注意事项
不要直接用Git提交运行中的Postgres数据卷目录,这种方式拿到的数据库文件是时间点不一致的脏数据,后续恢复时大概率会出现数据库损坏、无法启动的问题,Git本身不是设计用来做数据库热备份的工具。
无需停止Postgres的备份方案
- 逻辑备份(更适合轻量备份场景):执行以下命令导出全量SQL备份文件,你可以将该备份文件纳入Git跟踪:
docker exec -t <你的Postgres容器名称> pg_dumpall -c -U <你的Postgres用户名> > pg_full_backup.sql
- 物理热备份(适合大数据量场景):使用Postgres官方的
pg_basebackup工具,可在线导出一致性的物理数据备份,备份完成后再将备份文件存入Git或其他存储介质即可。
Git配置优化建议
在仓库根目录创建.gitignore文件,添加如下规则,直接屏蔽整个Postgres数据卷目录的变更检测,避免后续再出现同类未暂存变更提示:
# 屏蔽Postgres数据卷目录 _volumes/
内容的提问来源于stack exchange,提问作者avnav99
相关产品推荐
相关产品推荐

