summaryrefslogtreecommitdiffstats
path: root/pgcli
diff options
context:
space:
mode:
authorIrina Truong <i.chernyavska@gmail.com>2019-10-19 11:36:38 -0700
committerIrina Truong <i.chernyavska@gmail.com>2019-10-19 11:36:38 -0700
commit4f0c4d5a380f731f72ab16da194325e16ef337c4 (patch)
treef02b7fd0c9e2414805f26b0f93723380acf88036 /pgcli
parenta713b5d08b0fae4e55066f5438522a173f79606b (diff)
Fix for PQconninfo not available.
Diffstat (limited to 'pgcli')
-rw-r--r--pgcli/pgexecute.py31
1 files changed, 25 insertions, 6 deletions
diff --git a/pgcli/pgexecute.py b/pgcli/pgexecute.py
index 7186ec13..e186ff19 100644
--- a/pgcli/pgexecute.py
+++ b/pgcli/pgexecute.py
@@ -7,6 +7,7 @@ import psycopg2.extensions as ext
import sqlparse
import pgspecial as special
import select
+from distutils.version import LooseVersion
from psycopg2.extensions import POLL_OK, POLL_READ, POLL_WRITE, make_dsn
from .packages.parseutils.meta import FunctionMetadata, ForeignKey
from .encodingutils import unicode2utf8, PY2, utf8tounicode
@@ -265,14 +266,32 @@ class PGExecute(object):
# When we connect using a DSN, we don't really know what db,
# user, etc. we connected to. Let's read it.
# Note: moved this after setting autocommit because of #664.
- # TODO: use actual connection info from psycopg2.extensions.Connection.info as psycopg>2.8 is available and required dependency # noqa
- dsn_parameters = conn.get_dsn_parameters()
+ psycopg2_version = LooseVersion(psycopg2.__version__)
+ dsn_parameters = {}
+ if psycopg2_version >= LooseVersion("2.8"):
+ # use actual connection info from psycopg2.extensions.Connection.info
+ # as psycopg>2.8 is available and required dependency
+ dsn_parameters = conn.info.dsn_parameters
+ else:
+ try:
+ dsn_parameters = conn.get_dsn_parameters()
+ except Exception as x:
+ # https://github.com/dbcli/pgcli/issues/1110
+ # PQconninfo not available in libpq < 9.3
+ _logger.info("Exception in get_dsn_parameters. sql: %r", x)
+
+ if dsn_parameters:
+ self.dbname = dsn_parameters.get("dbname")
+ self.user = dsn_parameters.get("user")
+ self.host = dsn_parameters.get("host")
+ self.port = dsn_parameters.get("port")
+ else:
+ self.dbname = conn_params.get("database")
+ self.user = conn_params.get("user")
+ self.host = conn_params.get("host")
+ self.port = conn_params.get("port")
- self.dbname = dsn_parameters.get("dbname")
- self.user = dsn_parameters.get("user")
self.password = password
- self.host = dsn_parameters.get("host")
- self.port = dsn_parameters.get("port")
self.extra_args = kwargs
if not self.host: