diff options
author | Irina Truong <i.chernyavska@gmail.com> | 2019-10-19 11:36:38 -0700 |
---|---|---|
committer | Irina Truong <i.chernyavska@gmail.com> | 2019-10-19 11:36:38 -0700 |
commit | 4f0c4d5a380f731f72ab16da194325e16ef337c4 (patch) | |
tree | f02b7fd0c9e2414805f26b0f93723380acf88036 | |
parent | a713b5d08b0fae4e55066f5438522a173f79606b (diff) |
Fix for PQconninfo not available.
-rw-r--r-- | pgcli/pgexecute.py | 31 |
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: |