Estoy configurando la replicación bidireccional entre cuatro trabajadores de PostgreSQL y me gustaría que mi grupo de conexiones de base de datos Go maneje las conexiones a los cuatro. Debería poder crear múltiples conexiones para todos ellos, seleccionar uno al azar para cualquier consulta dada y fallar cuando se cae una conexión. ¿Es esto factible en la biblioteca de la base de datos Go? ¿O debería simplemente usar pgBouncer y no intentar obtener la base de datos/sql o pgx para manejar ese equilibrio?
El grupo de conexiones en golang se crea cada vez que llama a sql.Open(driverName, dataSourceName) , donde dataSourceName es la configuration específica del controlador para conectarse a la base de datos. Cada vez que cambiamos la configuration (es decir, cambiar la dirección del host, el esquema, el nombre de usuario, etc.) necesitamos abrir una nueva conexión, por lo que se creará un nuevo grupo de conexiones. Si un controlador puede manejar el equilibrio de carga, debe ser configurable en dataSourceName , por ejemplo, como en la configuración de alta disponibilidad de MariaDB Connector/J .
AFAIK, el equilibrio de carga aún no es compatible con lib/pq y pgx . En su caso, para conectarse a los servidores de bases de datos en el clúster, debe abrir un grupo de conexiones diferente para cada servidor, luego administrar las conexiones (y realizar el equilibrio de carga) manualmente. Este enfoque necesita mucho trabajo por hacer. Creo que es mejor usar pgBouncer.