Index: django/core/management/commands/shell.py
===================================================================
--- django/core/management/commands/shell.py	(revision 10369)
+++ django/core/management/commands/shell.py	(working copy)
@@ -56,4 +56,20 @@
                         pass
                 # This will import .pythonrc.py as a side-effect
                 import user
-            code.interact(local=imported_objects)
+
+            class DjangoConsole(code.InteractiveConsole):
+                def showtraceback(self):
+                        import sys
+                        from django.db import connection, DatabaseError
+
+                        code.InteractiveConsole.showtraceback(self)
+
+                        # Rollback after a DatabaseError, so the shell doesn't get stuck in "current 
+                        # transaction is aborted" in Postgresql.
+                        exc_type, exc_value, tb = sys.exc_info()
+                        if isinstance(exc_value, DatabaseError):
+                            connection._rollback()
+
+            interp = DjangoConsole(imported_objects)
+            interp.interact()
+
