Permalink
Browse files

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
  • Loading branch information...
1 parent 0597dea commit 536ccd1134d747bc22cf80c42c332e533146a9fe @malcolmt malcolmt committed Mar 16, 2009
Showing with 8 additions and 6 deletions.
  1. +8 −6 django/db/backends/postgresql_psycopg2/base.py
@@ -29,7 +29,7 @@
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 @@ def _cursor(self):
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):

0 comments on commit 536ccd1

Please sign in to comment.