Postgresql 无法执行两阶段提交

Postgresql 无法执行两阶段提交,postgresql,erlang,Postgresql,Erlang,要了解有关此主题的更多信息,请阅读XA、分布式事务、两阶段提交等。我不明白为什么文档不清晰。它粗略地说:“数据库始终处于一致状态”。不过,我认为你的问题可能会更清楚。考虑用一些标记来标记它,这样读起来就更容易了。对于“可能”和“可能”的定义可能会更好。伊凡问题是,它不是100%确定的,因为你正在进行一个硬事务系统(PG)和非事务系统(TCP/IP与客户端)的交互。要绕过它,还需要一个持久的、崩溃安全的客户端事务日志。您使用的是epgsql的哪个分支?谢谢,但这不是我的应用程序想要的。请不要冒犯p

要了解有关此主题的更多信息,请阅读XA、分布式事务、两阶段提交等。

我不明白为什么文档不清晰。它粗略地说:“数据库始终处于一致状态”。不过,我认为你的问题可能会更清楚。考虑用一些标记来标记它,这样读起来就更容易了。对于“可能”和“可能”的定义可能会更好。伊凡问题是,它不是100%确定的,因为你正在进行一个硬事务系统(PG)和非事务系统(TCP/IP与客户端)的交互。要绕过它,还需要一个持久的、崩溃安全的客户端事务日志。您使用的是
epgsql
的哪个分支?谢谢,但这不是我的应用程序想要的。
请不要冒犯postgres,我喜欢它。我的应用程序的问题在于,它可能从不同的erlang进程向同一postgres后端发送命令。例如,由另一进程的命令触发的来自postgres后端的信号可能会使我的应用程序和/或客户端库处于意外状态。我想了解更多关于postgres后端在这种情况下如何工作的详细信息,以便在我这边正确地解决这个问题。@Ivan每个连接有一个后端,每个进程有一个连接。你能做我认为你所描述的事情的唯一方法是,如果你连接到PostgreSQL,然后
fork()
而不使用
exec()
。如果您这样做,您将面临灾难,因为客户端库(libpq)不允许多个线程同时使用同一连接。如果线程与适当的互斥体隔离,那么它可以工作,但是如果您使用单独的进程,那么它可能不工作,因为任何内部libpq状态都将不同步。别那么做。它坏了。这是不安全的。我的应用程序在erlang中,很容易从另一个进程使用相同的连接。我想解决这个问题,这样就没有人能够从另一个进程向后端发送任何命令,即使有人可以访问连接pid。@Ivan PostgreSQL的Earlang数据库适配器是否包装了libpq?或者它是一个完全独立的实现(就像PgJDBC一样)?@Ivan。。。或者,在谷歌快速搜索之后,更确切地说是“您正在使用哪个PostgreSQL的Erlang驱动程序”<代码>epg(libpq包装)?众多其他人中的一个?无论如何,除非它是为了安全地共享连接而设计的,并且具有适当的同步,否则在fork()之前连接可能是错误的。