Transaction事务
** 两阶段提交 **
在PostgreSQL中是可以支持两阶段提交协议的;
在分布式系统当中,事务往往包含了多台数据库上的操作,单台数据库可以很好的保证原子性,而多台数据库之间的原子性就需要通过两阶段提交来实现了;
两阶段提交协议的步骤:
1) 应用程序进行一组操作,不提交事务; 然后调用事务协调器中的提交方法;
2) 事务协调器联系事务中涉及的数据库,并通知他们准备提交事务,这是"阶段1",在PostgreSQL中使用"Prepare Transaction"命令;
3) 事务中涉及的数据库接收到"Prepare Transaction"命令后,数据库必须将自己置于下列状态:
1. 确保后续在被要求提交事务时提交事务;
2. 再被要求回滚事务时能够回滚事务;
PostgreSQL会将已经准备好的事务提交的信息持久化存储(写盘),如果数据库无法提交事务,则返回失败信息给事务协调器;
4) 事务协调器收到事务涉及的数据库的响应信息;
5) 接下来是"阶段2",事务接收到相应信息后,如果是FAILURE,那么就发送给所有节点"ROLLBACK PREPARED"指令; 如果返回成功,则返回"COMMIT PREPARED"指令,通知该事务的完成;