PostgreSQL中如何查询索引的元数据
Posted
技术标签:
【中文标题】PostgreSQL中如何查询索引的元数据【英文标题】:How to query the metadata of indexes in PostgreSQL 【发布时间】:2011-05-07 12:54:14 【问题描述】:我需要能够查询 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 的 STATISTICS 表似乎是 SQL Server 扩展。我怎样才能在 PostgreSQL 中做同样的事情?
编辑:我特别想返回一个非规范化的结果集,如下所示
TableName, IndexName, UniqueFl, ColumnName
所以我为所有索引中的每一列返回一行。
谢谢, 乔恩
【问题讨论】:
【参考方案1】:在 PostgreSQL 中查看这些关于统计信息的视图:
http://www.postgresql.org/docs/current/static/information-schema.html http://www.postgresql.org/docs/current/static/monitoring-stats.html
【讨论】:
谢谢,我检查了第一个链接,但找不到我需要的。我不认为第二个是我所追求的。【参考方案2】:您在寻找什么元数据?
如果您知道自己在寻找什么,那么您可以找到各种各样的好东西。例如,这里是索引统计信息和元数据的转储。
SELECT *, pg_size_pretty(pg_relation_size(indexrelname::text))
FROM pg_stat_all_indexes
WHERE schemaname = 'public'
浏览 postgresql wiki 会发现各种好东西。
【讨论】:
谢谢,我添加了一个编辑来准确显示我想要的内容。它更多的是元数据而不是统计数据。【参考方案3】:我认为从 information_schema 来看这是不可能的 见this discussion。不是从约束创建的索引不会在信息架构中。
但是,您可以从系统表中 见this question
【讨论】:
谢谢 - 链接的问题正是我所需要的。【参考方案4】:我用来查看索引列表及其实际大小的查询:
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;
【讨论】:
以上是关于PostgreSQL中如何查询索引的元数据的主要内容,如果未能解决你的问题,请参考以下文章