有人可以告诉我如何在 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);
最佳答案
使用dblink并不是真正的分布式事务,因为有可能远程事务成功,而本地事务失败。
执行分布式事务:
使用
BEGIN
创建正常交易或START TRANSACTION
在两个数据库上。在两个数据库上执行工作。
完成后,在两个数据库上准备事务:
PREPARE TRANSACTION 'some_name';
此步骤将执行
COMMIT
期间可能会失败的所有操作。并持久化事务,但它还不会提交它。如果该步骤在某处失败,请使用
ROLLBACK
或ROLLBACK PREPARED
中止所有数据库上的事务。在所有数据库上提交事务:
COMMIT PREPARED 'some_name';
这一定会成功。
为了可靠地执行分布式事务,您需要一个事务管理器:这是一个跟踪所有分布式事务的软件。该组件必须保留其信息,以便在崩溃时能够幸存。事务管理器的工作是提交或回滚崩溃后处于不完整状态的任何事务。
这是必要的,因为即使您重新启动数据库,准备好的事务也会保留下来,并且它们将持有锁并阻止 VACUUM
进步。这种孤立的准备好的事务可能会破坏您的数据库。
切勿在没有事务管理器的情况下使用分布式事务!
关于postgresql - PostgreSQL 上的分布式事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65830457/