From b86de32d4ce153ca670e5c270b80e8455c6ad0cf Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Sun, 17 Oct 2021 18:57:06 +0200 Subject: [PATCH] Don't use context manager for CREATE DATABASE Psycopg 2.9 does uses transaction blocks withing context managers, which is not allowed for CREATE DATABASE https://github.com/psycopg/psycopg2/issues/941 --- .../pytest_server_fixtures/postgres.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pytest-server-fixtures/pytest_server_fixtures/postgres.py b/pytest-server-fixtures/pytest_server_fixtures/postgres.py index 7c6ea33d..aeab36ad 100644 --- a/pytest-server-fixtures/pytest_server_fixtures/postgres.py +++ b/pytest-server-fixtures/pytest_server_fixtures/postgres.py @@ -103,18 +103,22 @@ def run_cmd(self): def check_server_up(self): from psycopg2 import OperationalError + conn = None try: print("Connecting to Postgres at localhost:{}".format(self.port)) - with self.connect('postgres') as conn: - conn.set_session(autocommit=True) - with conn.cursor() as cursor: - cursor.execute("CREATE DATABASE " + self.database_name) + conn = self.connect('postgres') + conn.set_session(autocommit=True) + with conn.cursor() as cursor: + cursor.execute("CREATE DATABASE " + self.database_name) self.connection = self.connect(self.database_name) with open(self.workspace / 'db' / 'postmaster.pid', 'r') as f: self.pid = int(f.readline().rstrip()) return True except OperationalError as e: print("Could not connect to test postgres: {}".format(e)) + finally: + if conn: + conn.close() return False def connect(self, database=None):