2010-11-09 189 views
3

我需要能夠查詢PostgreSQL數據庫以獲取有關當前索引及其詳細信息的信息。如何在PostgreSQL中查詢索引的元數據

在SQL Server中,我可以執行以下操作來獲取所有表/索引/列的列表中的所有指標:

select TABLE_NAME, INDEX_NAME, NON_UNIQUE, COLUMN_NAME 
from INFORMATION_SCHEMA.STATISTICS 
where TABLE_SCHEMA = 'my_schema' 
order by TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX 

似乎INFORMATION_SCHEMA的統計信息表是SQL Server擴展。我怎樣才能在PostgreSQL中做同樣的事情?

編輯:我特別想如下

TableName, IndexName, UniqueFl, ColumnName 

所以我得到一個行回來在所有指標每列返回一個非規範化的結果集。

感謝, 喬恩

回答

5

我不認爲這是可能的從information_schema 見this discussion。除約束以外創建的索引不會出現在信息模式中。

從系統表

但是你可以看到 this question

+0

謝謝 - 鏈接問題正是我所需要的。 – Jon 2010-11-10 20:12:48

5

你在找什麼元數據?

如果你知道你在找什麼,你可以找到各種各樣的膨脹的東西。例如,這是一個索引統計和元數據的轉儲。

SELECT *, pg_size_pretty(pg_relation_size(indexrelname::text)) 
    FROM pg_stat_all_indexes 
    WHERE schemaname = 'public' 

通過postgresql wiki進行挖掘會發現各種各樣的好東西。

+0

謝謝,我添加了一個編輯以準確顯示我想要的內容。它比統計數據更具元數據。 – Jon 2010-11-10 12:25:51

2

查詢我使用的,看的索引列表和它的實際尺寸:

SELECT relname AS name, 
reltuples as count, (c.relpages * (8192 /1024)/1024) as size_mb, 
c.relfilenode::regclass, cast(c.oid::regclass as TEXT), c.relnatts, c.relkind 
FROM pg_class c, pg_namespace n 
WHERE 
n.nspname ='MyNamespace' 
and n.oid = c.relnamespace 
and c.relkind = 'i' 
ORDER BY c.relpages DESC;