summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-03-16 00:34:58 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-03-16 00:34:58 +0000
commit536ccd1134d747bc22cf80c42c332e533146a9fe (patch)
tree0682ef317e0ce1e31a9c8d52c0e006493a8733a0
parent0597dea4d0cbf20a4b815f586ba1babccda93e2e (diff)
downloaddjango-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.py14
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):