PostgreSQL:应用线程持行锁时意外关闭,行锁及事务状态如何?
PostgreSQL行锁与事务在应用异常关闭时的行为
问题1:PostgreSQL中应用线程持有行锁时关闭会发生什么?
- 当持有行锁的应用线程意外关闭(进程崩溃、主动终止等),PostgreSQL会立即检测到连接断开。
- 数据库会自动回滚该线程对应的未提交事务,同时释放该事务持有的所有行锁、表锁等资源。
问题2:应用已获取行锁并执行事务时遇关闭(如断电),被锁定的行状态如何?行锁会解除且事务回滚吗?
- 无论应用进程关闭还是服务器断电,只要事务未提交,PostgreSQL重启后会触发崩溃恢复机制:
- 所有未完成的事务都会被彻底回滚,包括已获取行锁但未提交的事务。
- 被锁定的行将自动解除锁定,恢复到事务开始前的状态,不会遗留任何锁资源。
- 只有已成功提交的事务会被保留,未提交的操作全部撤销,行锁同步释放。
内容的提问来源于stack exchange,提问作者Majki
相关产品推荐
相关产品推荐

