首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL上的分布式事务

PostgreSQL上的分布式事务
EN

Stack Overflow用户
提问于 2021-01-21 23:21:50
回答 1查看 195关注 0票数 2

有人能告诉我如何在PostgreSQL上执行分布式事务吗?

我需要启动从节点x到节点y的事务(这个节点有一个数据库)。但是我在网上找不到我该怎么做的信息。

我所能做的就是一个分布式查询:

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

发布于 2021-01-22 01:07:24

使用dblink不是真正的分布式事务,因为远程事务可能成功,而本地事务失败。

要执行分布式事务,请执行以下操作:

  1. 在两个数据库上使用BEGINSTART TRANSACTION创建普通事务。

  1. 在两个数据库上执行工作。

  1. 完成后,在两个数据库上准备事务:

准备事务'some_name';

此步骤将执行在COMMIT期间可能失败的所有操作,并持久化事务,但它还不会提交事务。

如果该步骤在某处失败,请使用ROLLBACKROLLBACK PREPARED中止所有数据库上的事务。

  1. 在所有数据库上提交事务:

提交已准备好的'some_name';

这肯定会成功。

要可靠地执行分布式事务,您需要一个事务管理器:这是一个跟踪所有分布式事务的软件。这个组件必须持久化它的信息,这样它才能在崩溃中幸存下来。事务管理器的工作是提交或回滚在崩溃后处于不完整状态的任何事务。

这是必要的,因为即使您重新启动数据库,已准备好的事务仍将保留,并且它们将持有锁并阻止VACUUM进程。这种孤立的准备好的事务会破坏您的数据库。

在没有事务管理器的情况下决不使用分布式事务!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65830457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档