Postgresql 如何获得Golang数据库连接池来管理到群集中多个主机的连接?

Postgresql 如何获得Golang数据库连接池来管理到群集中多个主机的连接?,postgresql,go,replication,connection-pooling,postgresql-bdr,Postgresql,Go,Replication,Connection Pooling,Postgresql Bdr,我在四个PostgreSQL工作者之间进行设置,我希望我的Go数据库连接池能够处理到所有四个工作者的连接。它应该能够为所有查询创建多个连接,为任何给定查询随机选择一个,并在连接断开时进行故障切换。这在Go数据库库中可行吗?或者我应该使用而不是试图获得或处理这种平衡吗?只要调用sql.Open(driverName,dataSourceName),就会创建golang中的连接池,其中dataSourceName是连接到数据库的特定于驱动程序的配置。每当我们更改配置时(即更改主机地址、架构、用户名等

我在四个PostgreSQL工作者之间进行设置,我希望我的Go数据库连接池能够处理到所有四个工作者的连接。它应该能够为所有查询创建多个连接,为任何给定查询随机选择一个,并在连接断开时进行故障切换。这在Go数据库库中可行吗?或者我应该使用而不是试图获得或处理这种平衡吗?

只要调用
sql.Open(driverName,dataSourceName)
,就会创建golang中的连接池,其中
dataSourceName
是连接到数据库的特定于驱动程序的
配置。每当我们更改
配置时(即更改主机地址、架构、用户名等),我们都需要打开新连接,从而创建新的连接池。如果驱动程序可以处理负载平衡,则应在
dataSourceName
中进行配置,例如在高可用性配置中


AFAIK,和中尚不支持负载平衡。在您的情况下,要连接到集群中的数据库服务器,您需要为每个服务器打开不同的连接池,然后手动管理连接(并执行负载平衡)。这种方法需要做很多工作。我认为最好使用pgBouncer。

golang中的连接池是根据
配置的(对于每个模式的PostgreSQL,对于MySQL,您可以使用“相同”连接访问同一服务器中的多个数据库/模式)。如果需要连接到多个服务器,则需要为每个服务器创建不同的连接池,然后手动管理它。依我看,在你的情况下,你应该使用pgBouncer。