From 98c8bf1ceeab5c68751c83555f82cff1a9120a67 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Fri, 1 Oct 2021 07:23:57 +0200 Subject: [PATCH] Fixed #33160 -- Avoided suppressing query errors in _nodb_cursor() on PostgreSQL. --- django/db/backends/postgresql/base.py | 3 +++ tests/backends/postgresql/tests.py | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py index ad8d85da29..8864a4f543 100644 --- a/django/db/backends/postgresql/base.py +++ b/django/db/backends/postgresql/base.py @@ -304,10 +304,13 @@ class DatabaseWrapper(BaseDatabaseWrapper): @contextmanager def _nodb_cursor(self): + cursor = None try: with super()._nodb_cursor() as cursor: yield cursor except (Database.DatabaseError, WrappedDatabaseError): + if cursor is not None: + raise warnings.warn( "Normally Django will use a connection to the 'postgres' database " "to avoid running initialization queries against the production " diff --git a/tests/backends/postgresql/tests.py b/tests/backends/postgresql/tests.py index 7f27c69ffb..e8dfcf2f62 100644 --- a/tests/backends/postgresql/tests.py +++ b/tests/backends/postgresql/tests.py @@ -103,6 +103,11 @@ class Tests(TestCase): with connection._nodb_cursor(): pass + def test_nodb_cursor_reraise_exceptions(self): + with self.assertRaisesMessage(DatabaseError, 'exception'): + with connection._nodb_cursor(): + raise DatabaseError('exception') + def test_database_name_too_long(self): from django.db.backends.postgresql.base import DatabaseWrapper settings = connection.settings_dict.copy()