diff options
author | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2009-03-16 00:34:58 +0000 |
---|---|---|
committer | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2009-03-16 00:34:58 +0000 |
commit | 536ccd1134d747bc22cf80c42c332e533146a9fe (patch) | |
tree | 0682ef317e0ce1e31a9c8d52c0e006493a8733a0 | |
parent | 0597dea4d0cbf20a4b815f586ba1babccda93e2e (diff) | |
download | django-536ccd1134d747bc22cf80c42c332e533146a9fe.tar.gz |
More fixing of PostgreSQL < 8.2 problems with the psycopg2 backend.
Affects the postgresql_psycopg2 backend only. We now don't use the
"RETURNING" syntax in SQL INSERT statements unless it's required by the
autocommit behaviour. This fixes an edge-case that could cause crashes
with earlier PostgreSQL versions, but the broader problem remains to be
fixed (which is #10509).
Fixed #10467. Refs #10509.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10065 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r-- | django/db/backends/postgresql_psycopg2/base.py | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/django/db/backends/postgresql_psycopg2/base.py b/django/db/backends/postgresql_psycopg2/base.py index db4369f038..a5d6419bc6 100644 --- a/django/db/backends/postgresql_psycopg2/base.py +++ b/django/db/backends/postgresql_psycopg2/base.py @@ -29,7 +29,7 @@ psycopg2.extensions.register_adapter(SafeUnicode, psycopg2.extensions.QuotedStri class DatabaseFeatures(BaseDatabaseFeatures): needs_datetime_string_cast = False - can_return_id_from_insert = True + can_return_id_from_insert = False class DatabaseOperations(PostgresqlDatabaseOperations): def last_executed_query(self, cursor, sql, params): @@ -105,15 +105,17 @@ class DatabaseWrapper(BaseDatabaseWrapper): if self._version < (8, 0): # No savepoint support for earlier version of PostgreSQL. self.features.uses_savepoints = False - if self._version < (8, 2): - # Cannot return the insert ID as part of an INSERT statement - # prior to version 8.2. - self.features.can_return_id_from_insert = False - if self.features.uses_autocommit: + if self.features.uses_autocommit: + if self._version < (8, 2): # FIXME: Needs extra code to do reliable model insert # handling, so we forbid it for now. from django.core.exceptions import ImproperlyConfigured raise ImproperlyConfigured("You cannot use autocommit=True with PostgreSQL prior to 8.2 at the moment.") + else: + # FIXME: Eventually we're enable this by default for + # versions that support it, but, right now, that's hard to + # do without breaking other things (#10509). + self.features.can_return_id_from_insert = True return cursor def _enter_transaction_management(self, managed): |