Положение столбца в указателе - PullRequest
2 голосов
/ 09 сентября 2011

Как получить позицию столбца в индексе в базе данных PostgreSQL? indkey в таблице каталога pg_index дает положение этого столбца в его таблице, но я хочу, чтобы положение столбца в нем содержало индекс.

Ответы [ 3 ]

5 голосов
/ 09 сентября 2011

Вот один из способов.Возможно, это не лучший способ.

SELECT c.relname, a.attname, a.attnum 
FROM pg_attribute a
INNER JOIN pg_class c on c.oid = a.attrelid 
WHERE c.relkind = 'i'
  AND c.relname = 'beds_pkey'
  AND a.attnum > 0

, где beds_pkey - это имя индекса.

1 голос
/ 26 июля 2012

Вот запрос, который извлекает позицию в индексе при поиске по таблице:

select
  c.relname as tabela,
  a.relname as indexname,
  d.attname as coluna,
  (
    select
      temp.i + 1
    from
      (
        SELECT generate_series(array_lower(b.indkey,1),array_upper(b.indkey,1)) as i
      ) temp
    where
      b.indkey[i] = d.attnum
  ) as posicao
from
  pg_class a
    inner join
  pg_index b
    on
  a.oid = b.indexrelid 
    inner join
  pg_class c
    on
  b.indrelid = c.oid
    inner join
  pg_attribute d
    on
  c.oid = d.attrelid and
  d.attnum = any(b.indkey)
where
  b.indisprimary != true and
  a.relname not like 'pg_%'
order by
  tabela, indexname, posicao
1 голос
/ 09 сентября 2011

indkey - это массив, и порядок записей в этом массиве определяет порядок столбцов индекса.

Так что если indkey содержит {2,4}, то второй столбец таблицы идет первым в индексе, а четвертый столбец таблицы является вторым столбцом индекса.

Если indkey содержит {4,3}, то четвертый столбец таблицы - это первый столбец индекса, а третий столбец таблицы - второй столбец индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...