我有一个关于postgresql的棘手问题(在我的情况下为9.5)。 有关信息,我使用Odoo 9.0(但这不是主题)。
我最近不得不手动停止正常运行的SQL事务(我们软件中的一个错误使整个事务持续超过1天)。自动提交已被禁用(当然)。
为此,我使用了“粗暴的方式”(我最近发现它根本不被推荐):
kill -9 PID
我预计事务会“丢失”当前的修改(即使postgresql没有进行回滚,我认为修改会丢失)。
但事实是事务修改似乎已经应用于数据库(我自己没有任何显式的COMMIT)。
我的问题是:
你知道postgresql是否通常以这种方式行事(当交易过程被“硬”杀死时保存交易变更)?
否则,它可能是我们的软件ORM的“黑暗”部分,它在停止/杀死之前执行COMMIT ^^
非常感谢你的时间!
答案 0 :(得分:1)
当然不是。在显式COMMIT之前杀死后端或客户端会回滚事务。
否则,它可能是我们的软件ORM的“黑暗”部分,它在停止/杀死之前执行COMMIT ^^
一种可能性。没有人知道你所做的过程在等待或做什么。你失去了反省的机会。将来,如果它是PostgreSQL后端进程,您将需要在pg_activity
和pg_locks
中收集数据。
如果它是客户端,那么它可能真的在做任何。