2010-11-09 16 views
3

Je dois pouvoir interroger une base de données PostgreSQL pour obtenir des informations sur les index présents et leurs détails.Comment interroger les métadonnées d'index dans PostgreSQL

Sur SQL Server, je peux faire ce qui suit pour obtenir une liste de toutes les tables/index/colonnes pour tous les index:

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 

Il semble que le tableau des statistiques de INFORMATION_SCHEMA est une extension SQL Server. Comment puis-je faire l'équivalent dans PostgreSQL?

EDIT: Je suis spécifiquement essayer de retourner un résultat dénormaliser fixé comme suit

TableName, IndexName, UniqueFl, ColumnName 

donc je reçois une rangée pour chaque colonne dans tous les index.

Merci, Jon

Répondre

5

Je ne pense pas que cela soit possible à partir du schéma d'information voir this discussion. Les index créés autres que des contraintes ne seront pas dans le schéma d'informations.

Cependant des tables système, vous pouvez voir this question

+0

Merci - la question liée est exactement ce dont j'avais besoin. – Jon

5

Quelles sont les métadonnées que vous cherchez?

Il y a toutes sortes de choses que vous pouvez trouver, si vous savez ce que vous cherchez. Par exemple, voici un vidage des statistiques d'index et des métadonnées. Creuser à travers le wiki postgresql fera apparaître toutes sortes de bonnes choses.

+0

Merci, j'ai ajouté un edit pour montrer exactement ce que je veux. C'est plus de métadonnées que de statistiques. – Jon

2

La requête que je utilise pour voir la liste des index et sa taille réelle:

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;