diff options
| author | Andrew Godwin <andrew@aeracode.org> | 2013-07-02 12:06:00 +0100 |
|---|---|---|
| committer | Andrew Godwin <andrew@aeracode.org> | 2013-07-02 12:06:00 +0100 |
| commit | dbd3e775c1d2209d2b35cb1fa4b82e20b18c99d7 (patch) | |
| tree | 7e77903536e045aed55d5eae03ebb1bbf72a9bad | |
| parent | 9ef715d256938bd5d2c95a88ce0479aa5e493981 (diff) | |
Fix get_constraints to do multi-column indexes properly on pg
| -rw-r--r-- | django/db/backends/postgresql_psycopg2/introspection.py | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/django/db/backends/postgresql_psycopg2/introspection.py b/django/db/backends/postgresql_psycopg2/introspection.py index c4974b89ca..ec953285ad 100644 --- a/django/db/backends/postgresql_psycopg2/introspection.py +++ b/django/db/backends/postgresql_psycopg2/introspection.py @@ -177,26 +177,31 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): constraints[constraint]['columns'].add(column) # Now get indexes cursor.execute(""" - SELECT c2.relname, attr.attname, idx.indkey, idx.indisunique, idx.indisprimary + SELECT + c2.relname, + ARRAY( + SELECT attr.attname + FROM unnest(idx.indkey) i, pg_catalog.pg_attribute attr + WHERE + attr.attnum = i AND + attr.attrelid = c.oid + ), + idx.indisunique, + idx.indisprimary 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 WHERE c.oid = idx.indrelid AND idx.indexrelid = c2.oid - AND attr.attrelid = c.oid - AND attr.attnum = idx.indkey[0] AND c.relname = %s """, [table_name]) - for index, column, coli, unique, primary in cursor.fetchall(): - # If we're the first column, make the record + for index, columns, unique, primary in cursor.fetchall(): if index not in constraints: constraints[index] = { - "columns": set(), - "primary_key": False, - "unique": False, + "columns": set(columns), + "primary_key": primary, + "unique": unique, "foreign_key": False, "check": False, "index": True, } - # Record the details - constraints[index]['columns'].add(column) return constraints |
