diff options
Diffstat (limited to 'django/db/backends/postgresql/introspection.py')
-rw-r--r-- | django/db/backends/postgresql/introspection.py | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/django/db/backends/postgresql/introspection.py b/django/db/backends/postgresql/introspection.py index 85ea66f6d1..50c8fb11f0 100644 --- a/django/db/backends/postgresql/introspection.py +++ b/django/db/backends/postgresql/introspection.py @@ -36,13 +36,15 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): ignored_tables = [] _get_indexes_query = """ - SELECT attr.attname, idx.indkey, idx.indisunique, idx.indisprimary + SELECT attr.attname, idx.indkey, idx.indisunique, idx.indisprimary, + am.amname FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, - pg_catalog.pg_index idx, pg_catalog.pg_attribute attr + pg_catalog.pg_index idx, pg_catalog.pg_attribute attr, pg_catalog.pg_am am WHERE c.oid = idx.indrelid AND idx.indexrelid = c2.oid AND attr.attrelid = c.oid AND attr.attnum = idx.indkey[0] + AND c2.relam = am.oid AND c.relname = %s""" def get_field_type(self, data_type, description): @@ -132,6 +134,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): # row[1] (idx.indkey) is stored in the DB as an array. It comes out as # a string of space-separated integers. This designates the field # indexes (1-based) of the fields that have indexes on the table. + # row[4] is the type of index, e.g. btree, hash, etc. # Here, we skip any indexes across multiple fields. if ' ' in row[1]: continue @@ -142,6 +145,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): indexes[row[0]]['primary_key'] = True if row[2]: indexes[row[0]]['unique'] = True + indexes[row[0]]['type'] = row[4] return indexes def get_constraints(self, cursor, table_name): |