Index: django/db/backends/postgresql/operations.py
===================================================================
--- django/db/backends/postgresql/operations.py	(revision 10781)
+++ django/db/backends/postgresql/operations.py	(working copy)
@@ -121,14 +121,15 @@
                         style.SQL_TABLE(qn(model._meta.db_table))))
                     break # Only one AutoField is allowed per model, so don't bother continuing.
             for f in model._meta.many_to_many:
-                output.append("%s setval('%s', coalesce(max(%s), 1), max(%s) %s null) %s %s;" % \
-                    (style.SQL_KEYWORD('SELECT'),
-                    style.SQL_FIELD(qn('%s_id_seq' % f.m2m_db_table())),
-                    style.SQL_FIELD(qn('id')),
-                    style.SQL_FIELD(qn('id')),
-                    style.SQL_KEYWORD('IS NOT'),
-                    style.SQL_KEYWORD('FROM'),
-                    style.SQL_TABLE(qn(f.m2m_db_table()))))
+                if not f.rel.through:
+                    output.append("%s setval('%s', coalesce(max(%s), 1), max(%s) %s null) %s %s;" % \
+                        (style.SQL_KEYWORD('SELECT'),
+                        style.SQL_FIELD(qn('%s_id_seq' % f.m2m_db_table())),
+                        style.SQL_FIELD(qn('id')),
+                        style.SQL_FIELD(qn('id')),
+                        style.SQL_KEYWORD('IS NOT'),
+                        style.SQL_KEYWORD('FROM'),
+                        style.SQL_TABLE(qn(f.m2m_db_table()))))
         return output
 
     def savepoint_create_sql(self, sid):
Index: django/db/backends/oracle/base.py
===================================================================
--- django/db/backends/oracle/base.py	(revision 10781)
+++ django/db/backends/oracle/base.py	(working copy)
@@ -217,12 +217,13 @@
                     # continue to loop
                     break
             for f in model._meta.many_to_many:
-                table_name = self.quote_name(f.m2m_db_table())
-                sequence_name = get_sequence_name(f.m2m_db_table())
-                column_name = self.quote_name('id')
-                output.append(query % {'sequence': sequence_name,
-                                       'table': table_name,
-                                       'column': column_name})
+                if not f.rel.through:
+                    table_name = self.quote_name(f.m2m_db_table())
+                    sequence_name = get_sequence_name(f.m2m_db_table())
+                    column_name = self.quote_name('id')
+                    output.append(query % {'sequence': sequence_name,
+                                           'table': table_name,
+                                           'column': column_name})
         return output
 
     def start_transaction_sql(self):
Index: tests/regressiontests/m2m_through_regress/fixtures/m2m_through.json
===================================================================
--- tests/regressiontests/m2m_through_regress/fixtures/m2m_through.json	(revision 0)
+++ tests/regressiontests/m2m_through_regress/fixtures/m2m_through.json	(revision 0)
@@ -0,0 +1,34 @@
+[
+    {
+        "pk": "1",
+        "model": "m2m_through_regress.person",
+        "fields": {
+            "name": "Guido"
+        }
+    },
+    {
+        "pk": "1",
+        "model": "auth.user",
+        "fields": {
+             "username": "Guido",
+             "email": "bdfl@python.org",
+             "password": "abcde"
+        }
+    },
+    {
+        "pk": "1",
+        "model": "m2m_through_regress.group",
+        "fields": {
+            "name": "Python Core Group"
+        }
+    },
+    {
+        "pk": "1",
+        "model": "m2m_through_regress.usermembership",
+        "fields": {
+            "user": "1",
+            "group": "1",
+            "price": "100"
+        }
+    }
+]
\ No newline at end of file
Index: tests/regressiontests/m2m_through_regress/models.py
===================================================================
--- tests/regressiontests/m2m_through_regress/models.py	(revision 10781)
+++ tests/regressiontests/m2m_through_regress/models.py	(working copy)
@@ -12,7 +12,9 @@
     def __unicode__(self):
         return "%s is a member of %s" % (self.person.name, self.group.name)
 
+# using custom id column to test ticket #11107
 class UserMembership(models.Model):
+    id = models.AutoField(db_column='usermembership_id', primary_key=True)
     user = models.ForeignKey(User)
     group = models.ForeignKey('Group')
     price = models.IntegerField(default=100)
@@ -196,4 +198,10 @@
 # Flush the database, just to make sure we can.
 >>> management.call_command('flush', verbosity=0, interactive=False)
 
+## Regression test for #11107
+Ensure that sequences on m2m_through tables are being created for the through
+model, not for a phantom auto-generated m2m table.
+
+>>> management.call_command('loaddata', 'm2m_through', verbosity=0)
+
 """}
Index: docs/ref/django-admin.txt
===================================================================
--- docs/ref/django-admin.txt	(revision 10781)
+++ docs/ref/django-admin.txt	(working copy)
@@ -611,7 +611,7 @@
 
 Prints the SQL statements for resetting sequences for the given app name(s).
 
-See http://simon.incutio.com/archive/2004/04/21/postgres for more information.
+See http://simonwillison.net/2004/Apr/21/postgres/ for more information.
 
 startapp <appname>
 ------------------
