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中如何查询索引的元数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 数据库查询中查询列的元组?

我如何知道查询中是不是使用了任何索引 | PostgreSQL 11?

如何优化在 postgresql 中查询这些数据?

如何提高此 PostgreSQL 查询在索引扫描中的性能

如何在Postgresql查询中使用多个“唯一索引推断”

PostgreSQL 索引