Re: BUG #2848: information_schema.key_column_usage does not work - Mailing list pgsql-bugs

From Tom Lane
Subject Re: BUG #2848: information_schema.key_column_usage does not work
Date
Msg-id 21849.1168968846@sss.pgh.pa.us
Whole thread Raw
In response to Re: BUG #2848: information_schema.key_column_usage does not work  (Laurence Rowe <l@lrowe.co.uk>)
Responses Re: BUG #2848: information_schema.key_column_usage
List pgsql-bugs
Laurence Rowe <l@lrowe.co.uk> writes:
>> I have the following query:
>>
>> SELECT key_column_usage.*,constraint_type
>> FROM information_schema.key_column_usage
>> LEFT JOIN information_schema.table_constraints USING
>> (table_schema,table_name,constraint_name)
>> WHERE table_schema='whatever' and table_name='whatever'
>> ORDER BY constraint_type, constraint_name, ordinal_position
>>
>> This works when I am logged on as 'postgres', but if I try it after logging
>> on with a different username it fails with "ERROR: relation with OID 18635
>> does not exist".

Hmph ... I recall being unable to reproduce this before, but I'm not
sure why I failed, because it's definitely broken.  The key_column_usage
view has

          FROM pg_namespace nr, pg_class r, pg_namespace nc,
               pg_constraint c
          WHERE nr.oid = r.relnamespace
                AND r.oid = c.conrelid
                AND nc.oid = c.connamespace
                AND c.contype IN ('p', 'u', 'f')
                AND r.relkind = 'r'
                AND (NOT pg_is_other_temp_schema(nr.oid))
                AND (pg_has_role(r.relowner, 'USAGE')
                     OR has_table_privilege(c.oid, 'SELECT')
                     OR has_table_privilege(c.oid, 'INSERT')
                     OR has_table_privilege(c.oid, 'UPDATE')
                     OR has_table_privilege(c.oid, 'REFERENCES')) ) AS ss

Obviously those last four lines should be r.oid not c.oid.  The bug is
masked as long as the preceding pg_has_role() test succeeds, so in
particular a superuser would never see it :-(

We won't be able to force initdb to fix this in the back branches,
but fortunately the information schema views are not hardwired in.
Just drop the view and recreate it with the corrected definition...

            regards, tom lane

pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: BUG #2901: missing alter table online help in psql
Next
From: Bruce Momjian
Date:
Subject: Re: BUG #2898: dynamic load support