diff options
author | Amjith Ramanujam <amjith.r@gmail.com> | 2019-10-28 10:08:59 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-28 10:08:59 -0700 |
commit | f3dc23a94b57ccd7c1909dc32174b3bc8c501919 (patch) | |
tree | 6d6b83cc8f96a49be7f6eb576ffa6fbca69cfd18 /pgcli | |
parent | 199a0223e044ec3116879e67d2b924050e4afa78 (diff) | |
parent | d75878185847c69b239596bb45f159446b674b03 (diff) |
Merge pull request #1112 from dbcli/j-bennet/pqconninfo-1110
[WIP] Fix for PQconninfo not available.
Diffstat (limited to 'pgcli')
-rw-r--r-- | pgcli/pgexecute.py | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/pgcli/pgexecute.py b/pgcli/pgexecute.py index 7186ec13..e4605c02 100644 --- a/pgcli/pgexecute.py +++ b/pgcli/pgexecute.py @@ -265,14 +265,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() + libpq_version = psycopg2.__libpq_version__ + dsn_parameters = {} + if libpq_version >= 93000: + # use actual connection info from psycopg2.extensions.Connection.info + # as libpq_version > 9.3 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: %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: |