-
-
Notifications
You must be signed in to change notification settings - Fork 223
Closed
Description
It seems that target_session_attrs=prefer-standby is not handled by psycopg. I believe a patch similar to the below (or something better) would be needed in order to make it work.
References:
diff --git a/psycopg/psycopg/connection.py b/psycopg/psycopg/connection.py
index d7035e27..c5f8a3c1 100644
--- a/psycopg/psycopg/connection.py
+++ b/psycopg/psycopg/connection.py
@@ -94,7 +94,19 @@ class Connection(BaseConnection[Row]):
params = cls._get_connection_params(conninfo, **kwargs)
timeout = timeout_from_conninfo(params)
rv = None
- attempts = conninfo_attempts(params)
+
+ if "target_session_attrs" in params and params["target_session_attrs"] == "prefer-standby":
+ params_standby = dict(params)
+ params_primary = dict(params)
+
+ params_standby["target_session_attrs"] = "standby"
+ params_primary["target_session_attrs"] = "primary"
+
+ attempts = conninfo_attempts(params_standby)
+ attempts.extend(conninfo_attempts(params_primary))
+ else:
+ attempts = conninfo_attempts(params)
+
for attempt in attempts:
try:
conninfo = make_conninfo("", **attempt)
diff --git a/psycopg/psycopg/connection_async.py b/psycopg/psycopg/connection_async.py
index 94a8bf3c..4fa8ba6e 100644
--- a/psycopg/psycopg/connection_async.py
+++ b/psycopg/psycopg/connection_async.py
@@ -110,7 +110,19 @@ class AsyncConnection(BaseConnection[Row]):
params = await cls._get_connection_params(conninfo, **kwargs)
timeout = timeout_from_conninfo(params)
rv = None
- attempts = await conninfo_attempts_async(params)
+
+ if "target_session_attrs" in params and params["target_session_attrs"] == "prefer-standby":
+ params_standby = dict(params)
+ params_primary = dict(params)
+
+ params_standby["target_session_attrs"] = "standby"
+ params_primary["target_session_attrs"] = "primary"
+
+ attempts = await conninfo_attempts_async(params_standby)
+ attempts.extend(await conninfo_attempts_async(params_primary))
+ else:
+ attempts = await conninfo_attempts_async(params)
+
for attempt in attempts:
try:
conninfo = make_conninfo("", **attempt)Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels