diff -r 3758c6563608 django/db/backends/__init__.py
--- a/django/db/backends/__init__.py	Wed Dec 24 00:03:44 2008 +0000
+++ b/django/db/backends/__init__.py	Tue Jan 06 12:37:12 2009 +0000
@@ -52,6 +52,7 @@
     uses_custom_query_class = False
     empty_fetchmany_value = []
     update_can_self_select = True
+    supports_return_id_from_insert = False
 
 class BaseDatabaseOperations(object):
     """
diff -r 3758c6563608 django/db/backends/postgresql_psycopg2/base.py
--- a/django/db/backends/postgresql_psycopg2/base.py	Wed Dec 24 00:03:44 2008 +0000
+++ b/django/db/backends/postgresql_psycopg2/base.py	Tue Jan 06 12:37:12 2009 +0000
@@ -23,6 +23,7 @@
 class DatabaseFeatures(BaseDatabaseFeatures):
     needs_datetime_string_cast = False
     needs_upper_for_iops = True
+    supports_return_id_from_insert = True
 
 class DatabaseOperations(PostgresqlDatabaseOperations):
     def last_executed_query(self, cursor, sql, params):
diff -r 3758c6563608 django/db/models/sql/subqueries.py
--- a/django/db/models/sql/subqueries.py	Wed Dec 24 00:03:44 2008 +0000
+++ b/django/db/models/sql/subqueries.py	Tue Jan 06 12:37:12 2009 +0000
@@ -294,11 +294,18 @@
         result = ['INSERT INTO %s' % qn(self.model._meta.db_table)]
         result.append('(%s)' % ', '.join([qn(c) for c in self.columns]))
         result.append('VALUES (%s)' % ', '.join(self.values))
+        if self.connection.features.supports_return_id_from_insert:
+            result.append('RETURNING %s.%s' % (qn(self.model._meta.db_table), 
+                                 qn(self.model._meta.pk.column)))
+
         return ' '.join(result), self.params
 
     def execute_sql(self, return_id=False):
         cursor = super(InsertQuery, self).execute_sql(None)
-        if return_id:
+        if return_id and self.connection.features.supports_return_id_from_insert:
+            row_id = cursor.fetchone()[0]
+            return row_id
+        elif return_id:
             return self.connection.ops.last_insert_id(cursor,
                     self.model._meta.db_table, self.model._meta.pk.column)
