有人能告诉我如何在PostgreSQL上执行分布式事务吗?
我需要启动从节点x到节点y的事务(这个节点有一个数据库)。但是我在网上找不到我该怎么做的信息。
我所能做的就是一个分布式查询:
select dblink_connect
('conn','dbname=ConsultaRemota host=192.168.3.9
user=remoto password=12345 port=5432');
select * from dblink('conn','select * from tablaremota') as
temp (id_remoto int, nombre_remoto text, descripcion text);发布于 2021-01-22 01:07:24
使用dblink不是真正的分布式事务,因为远程事务可能成功,而本地事务失败。
要执行分布式事务,请执行以下操作:
BEGIN或START TRANSACTION创建普通事务。准备事务'some_name';
此步骤将执行在COMMIT期间可能失败的所有操作,并持久化事务,但它还不会提交事务。
如果该步骤在某处失败,请使用ROLLBACK或ROLLBACK PREPARED中止所有数据库上的事务。
提交已准备好的'some_name';
这肯定会成功。
要可靠地执行分布式事务,您需要一个事务管理器:这是一个跟踪所有分布式事务的软件。这个组件必须持久化它的信息,这样它才能在崩溃中幸存下来。事务管理器的工作是提交或回滚在崩溃后处于不完整状态的任何事务。
这是必要的,因为即使您重新启动数据库,已准备好的事务仍将保留,并且它们将持有锁并阻止VACUUM进程。这种孤立的准备好的事务会破坏您的数据库。
在没有事务管理器的情况下决不使用分布式事务!
https://stackoverflow.com/questions/65830457
复制相似问题