Check postgres version in check_database

this saves doing it on each connection, and will allow us to pass extra options
in.
This commit is contained in:
Richard van der Hoff 2020-01-09 17:33:41 +00:00
parent e97d1cf001
commit e48ba84e0b

View File

@ -33,6 +33,16 @@ class PostgresEngine(object):
self._version = None # unknown as yet self._version = None # unknown as yet
def check_database(self, db_conn): def check_database(self, db_conn):
# Get the version of PostgreSQL that we're using. As per the psycopg2
# docs: The number is formed by converting the major, minor, and
# revision numbers into two-decimal-digit numbers and appending them
# together. For example, version 8.1.5 will be returned as 80105
self._version = db_conn.server_version
# Are we on a supported PostgreSQL version?
if self._version < 90500:
raise RuntimeError("Synapse requires PostgreSQL 9.5+ or above.")
with db_conn.cursor() as txn: with db_conn.cursor() as txn:
txn.execute("SHOW SERVER_ENCODING") txn.execute("SHOW SERVER_ENCODING")
rows = txn.fetchall() rows = txn.fetchall()
@ -46,17 +56,6 @@ class PostgresEngine(object):
return sql.replace("?", "%s") return sql.replace("?", "%s")
def on_new_connection(self, db_conn): def on_new_connection(self, db_conn):
# Get the version of PostgreSQL that we're using. As per the psycopg2
# docs: The number is formed by converting the major, minor, and
# revision numbers into two-decimal-digit numbers and appending them
# together. For example, version 8.1.5 will be returned as 80105
self._version = db_conn.server_version
# Are we on a supported PostgreSQL version?
if self._version < 90500:
raise RuntimeError("Synapse requires PostgreSQL 9.5+ or above.")
db_conn.set_isolation_level( db_conn.set_isolation_level(
self.module.extensions.ISOLATION_LEVEL_REPEATABLE_READ self.module.extensions.ISOLATION_LEVEL_REPEATABLE_READ
) )
@ -120,8 +119,8 @@ class PostgresEngine(object):
Returns: Returns:
string string
""" """
# note that this is a bit of a hack because it relies on on_new_connection # note that this is a bit of a hack because it relies on check_database
# having been called at least once. Still, that should be a safe bet here. # having been called. Still, that should be a safe bet here.
numver = self._version numver = self._version
assert numver is not None assert numver is not None