pg的两阶段提交

文章详细描述了如何在PostgreSQL中进行事务操作,包括不提交事务、事务协调器的作用、预提交阶段、max_prepared_transactions参数调整以及实验过程,展示了数据库事务的完整生命周期管理。
摘要由CSDN通过智能技术生成

5个步骤:

1.各台数据库做操作,不提交事务。应用程序调用事务协调器中的提交方法。

2.事务协调器,连接每台数据库,通知他们准备提交(第一阶段的开始),pg中一般是调用prepare transaction命令。

3.各台数据库收到prepare transaction命令后,返回成功,数据库将自己处于如下状态:确保后续被要求commit、rollback的时候可以commit和rollback,pg将已准备好提交的信息写入存储中。如果数据库无法完成此事务,它会直接返回失败给事务协调器。

4.事务协调器接收所有数据库的响应。

5.在第二阶段,如果有的数据库第一阶段失败,则事务协调器会发送回滚命令“rollback prepared”给失败的数据库。如果响应成功,则向各台数据库发送commit prepared命令,通知各数据库事务成功。

实验:

1.更改max_prepared_transactions参数大于0

postgresql.conf中修改max_prepared_transactions=10

重启pg服务

/usr/pgsql-12/bin/pg_ctl restart -D /data

查看max_prepared_transactions参数值

show max_prepared_transactions;

2.开始实验

建表

create table testtab01(id int primary key);

开启事务,插入一行数据

begin;

insert into testtab01 values(1);

手动通知提交(阶段一)(执行完,事务协调器会持久化该全局事务idosdba_global_trans_0001,重启也不会回滚或者丢失)

PREPARE TRANSACTION 'osdba_global_trans_0001';

重启数据库

/usr/pgsql-12/bin/pg_ctl stop -D /data

/usr/pgsql-12/bin/pg_ctl start -D /data

或者

/usr/pgsql-12/bin/pg_ctl restart -D /data

查看表

\c testhaha

select * from testtab01;

手动发送成功命令(阶段二)

COMMIT PREPARED 'osdba_global_trans_0001';

再次查看表(验证)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪灵骅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值