我有一个小的python脚本,将数据推送到我的django postgres db。它从django项目中导入相关的模型,并使用.save函数将数据保存到数据库中。
昨天系统运行良好。我在一天中多次启动和停止我的django项目和python脚本,但从未重新启动或关闭我的计算机,直到一天结束。
今天我发现数据不再在db!
这看起来很傻,因为我可能忘记做一些明显的事情,但我认为,当保存函数从模型调用时,数据被提交到数据库。
所以这个答案是"从哪里开始排除这样的问题",因为这个问题很模糊,我们没有足够的信息来有效地排除问题。
如果这种情况再次发生,首先要做的是打开PostgreSQL的语句日志记录,并在它们进入时查看语句。这将显示开始和提交语句以及查询。如果不访问查询,几乎不可能对这类问题进行故障排除。要查找的内容包括丢失的提交和丢失的语句。
在那之后,下一件要做的事情是看看你的计算机是在什么情况下重启的。它是否可能在预期的提交之前这样做?或者它断电了,没有及时将事务日志刷新到磁盘上?
这两个应该可以排除开发环境中db端几乎所有可能的原因。在旧版本PostgreSQL的生产环境中,您确实希望验证系统是否有自动真空正常运行,并且您没有收到关于xid封装的警告。在较新的版本中,这不是一个问题,因为PostgreSQL在使用xid环绕时将拒绝接受查询。