【问题标题】:Distributed transaction on PostgreSQLPostgreSQL 上的分布式事务
【发布时间】:2021-01-21 15:21:50
【问题描述】:

谁能告诉我如何在 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);

【问题讨论】:

    标签: postgresql distributed-transactions


    【解决方案1】:

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

    执行分布式事务:

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

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

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

      PREPARE TRANSACTION 'some_name';
      

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

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

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

      COMMIT PREPARED 'some_name';
      

      这保证会成功。

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

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

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

    【讨论】:

    • 我怎么能说databade在另一台电脑上的事务。
    • 带连接字符串。
    • 这是我的问题 :"(,你能帮帮我吗?
    • 这是一个不同的问题。但请注意,Stackoverflow 是一个问答论坛,不适合用于教程或教学会议。
    • 我看到很多人在任何问题上寻求帮助,也有很多人提供帮助。无论如何谢谢你:")。
    猜你喜欢
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 2012-08-31
    • 1970-01-01
    • 2013-10-05
    • 2023-03-29
    • 2011-02-03
    相关资源
    最近更新 更多