diff --git a/django/db/backends/mysql/introspection.py b/django/db/backends/mysql/introspection.py index 93e89c1263..477478ca9d 100644 --- a/django/db/backends/mysql/introspection.py +++ b/django/db/backends/mysql/introspection.py @@ -103,6 +103,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): continue if row[4] not in indexes: indexes[row[4]] = {'primary_key': False, 'unique': False} + # It's possible to have the unique and PK constraints in separate indexes. if row[2] == 'PRIMARY': indexes[row[4]]['primary_key'] = True if not bool(row[1]): diff --git a/django/db/backends/postgresql_psycopg2/introspection.py b/django/db/backends/postgresql_psycopg2/introspection.py index 5a29932859..d43b95406c 100644 --- a/django/db/backends/postgresql_psycopg2/introspection.py +++ b/django/db/backends/postgresql_psycopg2/introspection.py @@ -86,7 +86,13 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): # Here, we skip any indexes across multiple fields. if ' ' in row[1]: continue - indexes[row[0]] = {'primary_key': row[3], 'unique': row[2]} + if row[0] not in indexes: + indexes[row[0]] = {'primary_key': False, 'unique': False} + # It's possible to have the unique and PK constraints in separate indexes. + if row[3]: + indexes[row[0]]['primary_key'] = True + if row[2]: + indexes[row[0]]['unique'] = True return indexes def get_constraints(self, cursor, table_name):