postgrseql:kill进程是否提交当前事务?

时间:2017-04-13 09:21:33

标签: postgresql

我有一个关于postgresql的棘手问题(在我的情况下为9.5)。 有关信息,我使用Odoo 9.0(但这不是主题)。

我最近不得不手动停止正常运行的SQL事务(我们软件中的一个错误使整个事务持续超过1天)。自动提交已被禁用(当然)。

为此,我使用了“粗暴的方式”(我最近发现它根本不被推荐):

kill -9 PID

我预计事务会“丢失”当前的修改(即使postgresql没有进行回滚,我认为修改会丢失)。

但事实是事务修改似乎已经应用于数据库(我自己没有任何显式的COMMIT)。

我的问题是:

你知道postgresql是否通常以这种方式行事(当交易过程被“硬”杀死时保存交易变更)?

否则,它可能是我们的软件ORM的“黑暗”部分,它在停止/杀死之前执行COMMIT ^^

非常感谢你的时间!

1 个答案:

答案 0 :(得分:1)

当然不是。在显式COMMIT之前杀死后端或客户端会回滚事务。

  

否则,它可能是我们的软件ORM的“黑暗”部分,它在停止/杀死之前执行COMMIT ^^

一种可能性。没有人知道你所做的过程在等待或做什么。你失去了反省的机会。将来,如果它是PostgreSQL后端进程,您将需要在pg_activitypg_locks中收集数据。

如果它是客户端,那么它可能真的在做任何