Author: mtredinnick
Date: 2009-03-15 19:34:58 -0500 (Sun, 15 Mar 2009)
New Revision: 10065

Modified:
   django/trunk/django/db/backends/postgresql_psycopg2/base.py
Log:
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.

Modified: django/trunk/django/db/backends/postgresql_psycopg2/base.py
===================================================================
--- django/trunk/django/db/backends/postgresql_psycopg2/base.py 2009-03-15 
11:21:41 UTC (rev 10064)
+++ django/trunk/django/db/backends/postgresql_psycopg2/base.py 2009-03-16 
00:34:58 UTC (rev 10065)
@@ -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 @@
             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):


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to