Author: Honza_Kral Date: 2011-08-29 08:55:06 -0700 (Mon, 29 Aug 2011) New Revision: 16708
Modified: django/trunk/django/db/backends/postgresql_psycopg2/base.py Log: Fixed #15802 -- pyscopg2 sometimes fail to close the connection when it's already closed by the server, Thanks Rick van Hattem Modified: django/trunk/django/db/backends/postgresql_psycopg2/base.py =================================================================== --- django/trunk/django/db/backends/postgresql_psycopg2/base.py 2011-08-28 14:43:51 UTC (rev 16707) +++ django/trunk/django/db/backends/postgresql_psycopg2/base.py 2011-08-29 15:55:06 UTC (rev 16708) @@ -14,6 +14,7 @@ from django.db.backends.postgresql_psycopg2.version import get_version from django.db.backends.postgresql_psycopg2.introspection import DatabaseIntrospection from django.utils.safestring import SafeUnicode, SafeString +from django.utils.log import getLogger try: import psycopg2 as Database @@ -29,6 +30,8 @@ psycopg2.extensions.register_adapter(SafeString, psycopg2.extensions.QuotedString) psycopg2.extensions.register_adapter(SafeUnicode, psycopg2.extensions.QuotedString) +logger = getLogger('django.db.backends') + class CursorWrapper(object): """ A thin wrapper around psycopg2's normal cursor class so that we can catch @@ -114,6 +117,24 @@ self.cursor().execute('SET CONSTRAINTS ALL IMMEDIATE') self.cursor().execute('SET CONSTRAINTS ALL DEFERRED') + def close(self): + if self.connection is None: + return + + try: + self.connection.close() + self.connection = None + except psycopg2.Error: + # In some cases (database restart, network connection lost etc...) + # the connection to the database is lost without giving Django a + # notification. If we don't set self.connection to None, the error + # will occur a every request. + self.connection = None + logger.warning('psycopg2 error while closing the connection.', + exc_info=sys.exc_info() + ) + raise + def _get_pg_version(self): if self._pg_version is None: self._pg_version = get_version(self.connection) -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.