2010-11-09 195 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;