diff --git a/tests/backends/test_utils.py b/tests/backends/test_utils.py
index bf62c8c6df..60429c5543 100644
--- a/tests/backends/test_utils.py
+++ b/tests/backends/test_utils.py
@@ -1,7 +1,10 @@
+import unittest
+
 from django.core.exceptions import ImproperlyConfigured
+from django.db import connection
 from django.db.backends.utils import truncate_name
-from django.db.utils import load_backend
-from django.test import SimpleTestCase
+from django.db.utils import ProgrammingError, load_backend
+from django.test import SimpleTestCase, TestCase
 
 
 class TestLoadBackend(SimpleTestCase):
@@ -24,3 +27,16 @@ class TestLoadBackend(SimpleTestCase):
         self.assertEqual(truncate_name('username"."some_table', 10), 'username"."some_table')
         self.assertEqual(truncate_name('username"."some_long_table', 10), 'username"."some_la38a')
         self.assertEqual(truncate_name('username"."some_long_table', 10, 3), 'username"."some_loa38')
+
+
+@unittest.skipUnless(connection.vendor == 'postgresql', 'PostgreSQL specific tests')
+class TestDatabaseErrorWrapper(TestCase):
+    def test_reraising_backend_specific_database_exception(self):
+        cursor = connection.cursor()
+        msg = 'table "X" does not exist'
+        with self.assertRaisesMessage(ProgrammingError, msg) as cm:
+            cursor.execute('DROP TABLE "X"')
+        self.assertNotEqual(type(cm.exception), type(cm.exception.__cause__))
+        self.assertIsNotNone(cm.exception.__cause__)
+        self.assertIsNotNone(cm.exception.__cause__.pgcode)
+        self.assertIsNotNone(cm.exception.__cause__.pgerror)