如何獲取PostgreSQL數據庫中索引中列的位置? pg_index目錄表中的indkey提供了該列在表格中的位置,但是我希望列中包含索引的位置。列在索引中的位置
列在索引中的位置
回答
這是一種方法。這可能不是最好的方法。
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
是索引的名稱。
indkey
是一個數組,並且該數組中條目的順序決定了索引列的順序。
因此,如果indkey
包含{2,4},那麼表中的第二列首先出現在索引中,而表的第四列是索引中的第二列。
如果indkey
包含{4,3},那麼表的第四列是索引中的第一列,而表的第三列是索引的第二列。
@Catcall從一個簡單的測試,該解決方案適合我。我必須對此進行一些調整才能使用它。 – vchitta
下面是當您搜索通過表檢索上的索引位置的查詢:
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
李嘉圖的答案確實是我需要的答案。您需要在向量pg_index.indkey中找到pg_attribute.attnum的位置(表格中列的位置)。這會給你索引中列的位置。 –
當您查詢索引中具有自己表的列的attnum時,Mike的解決方案是正確的。 Mike's可以讓你通過索引進行查詢,這可以讓你通過表進行查詢。 – Logan
- 1. 陣列索引位置中的元素
- 2. 位置索引在python中?
- 3. MotionEvent在EditText中的位置索引
- 4. 在列表中查找並返回位置索引處的值
- 5. 如何在索引位置替換列表中的值?
- 6. 在位置索引中查找bigram
- 7. LAMBDA的ForEach()索引位置
- 8. oracle複合索引列位置和非複合索引
- 9. 在SQLite中搜索列的位置
- 10. 從mysql中的int列中獲取設置位的索引
- 11. 位列上的索引
- 12. Python中的位置反轉索引
- 13. MongoDB中的位置倒排索引
- 14. 查找矩陣中的索引位置
- 15. 獲取GridLayout中JPanel的位置/索引?
- 16. 1在索引位置的數組
- 17. 如何更改索引位置中的複合索引
- 18. Rails沒有索引位置
- 19. jQuery按鈕位置索引
- 20. 返回索引位置
- 21. 獲取索引位置()
- 22. 地圖與位置索引
- 23. 數據庫位置索引
- 24. 如何刪除字符串中的一系列索引位置?
- 25. 獲取列表C中字符串的索引位置#
- 26. MS Sql 2008索引在2D位置的兩列
- 27. 位排列索引字典
- 28. 在startDrag上改變索引位置
- 29. 如何根據行位和列位置找到索引
- 30. 二進制搜索索引位置
+1比我的回答更好的解決方案。 –
但是,查看名爲「indkey」的東西比加入pg_class和pg_attribute更有意義。我討厭系統表。每次看到他們,我都覺得我的名字是愛麗絲,而我剛剛穿過鏡子。 –