Re: BUG #2848: information_schema.key_column_usage does not work

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: BUG #2848: information_schema.key_column_usage does not work
Дата
Msg-id 21849.1168968846@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: BUG #2848: information_schema.key_column_usage does not work  (Laurence Rowe <l@lrowe.co.uk>)
Ответы Re: BUG #2848: information_schema.key_column_usage  (Bruce Momjian <bruce@momjian.us>)
Список 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 по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: BUG #2901: missing alter table online help in psql
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: BUG #2898: dynamic load support