jackc / pgx

PostgreSQL driver and toolkit for Go
MIT License
10.78k stars 837 forks source link

Support libpq compatible load_balance_hosts parameter #2059

Open piraz opened 4 months ago

piraz commented 4 months ago

Hello @jackc,

I understand that we can use multiple hosts as described in the question #1184. This is supported by client applications relying on plbpq since PostgreSQL 10.

Do pgx suport/has a similar option as libpq to perform random load balance at client level added to PostgreSQL 16?

The new feature was added to be complaint with the existing JDBC implementation, introducing a new parameter to the connection string called load_balance_hosts, and new env variable PGLOADBALANCEHOST.

The option load_balance_hosts has two options, Disable where libpq will attempt to establish a connection using the host list provided(in order), with no load balancing, and Random providing attempt to connect to a randomly selected host from the list.

Do we have an option like that available currently in the project?

Thank you very much.

See:

jackc commented 4 months ago

Do we have an option like that available currently in the project?

No, there is not.

piraz commented 4 months ago

Do you think this is a relevant feature to be added to the project?

If yes, should I come with a new ticket or we just set this one a feature request?

jackc commented 4 months ago

Do you think this is a relevant feature to be added to the project?

I think it is a reasonable feature. But it might be a bit tricky to do.

pgx uses FallbackConfigsto represent all connection attempts that may be made. Ansslmodesuch aspreferas represented as 2 connection attempts that may be made. A host that resolves to multiple IPs is represented as multipleFallbackConfigs. And when multiple hosts are specified they are represented asFallbackConfigs. Exactly matching libpq's behavior may be challenging. The simple approach of shuffling theFallbackConfigs would breaksslmode`prefer.

Not really sure what a good approach would be.

If yes, should I come with a new ticket or we just set this one a feature request?

Let's use this issue.

piraz commented 4 months ago

Thank you very much.