""" Query execution that logs the SQL query when debugging is enabled.
"""
if LOG.isEnabledFor(logging.DEBUG):
- LOG.debug(self.mogrify(query, args).decode('utf-8')) # type: ignore[no-untyped-call]
+ LOG.debug(self.mogrify(query, args).decode('utf-8'))
super().execute(query, args)
return (int(version_parts[0]), int(version_parts[1]))
+ def hstore_version_tuple(self) -> Tuple[int, int]:
+ """ Return the hstore version installed in the database as a
+ tuple of (major, minor). Assumes that the hstore extension
+ has been installed already.
+ """
+ with self.cursor() as cur:
+ version = cur.scalar(
+ 'SELECT extversion FROM pg_extension WHERE extname = %s',
+ ('hstore')
+ )
+
+ version_parts = version.split('.')
+ if len(version_parts) < 2:
+ raise UsageError(f"Error fetching hstore version. Bad format: {version}")
+
+ return (int(version_parts[0]), int(version_parts[1]))
+
+
class ConnectionContext(ContextManager[Connection]):
""" Context manager of the connection that also provides direct access
to the underlying connection.
try:
conn = psycopg2.connect(dsn, connection_factory=Connection)
ctxmgr = cast(ConnectionContext, contextlib.closing(conn))
- ctxmgr.connection = cast(Connection, conn)
+ ctxmgr.connection = conn
return ctxmgr
except psycopg2.OperationalError as err:
raise UsageError(f"Cannot connect to database: {err}") from err