【问题标题】:How to query the metadata of indexes in PostgreSQLPostgreSQL中如何查询索引的元数据
【发布时间】: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

所以我为所有索引中的每一列返回一行。

谢谢, 乔恩

【问题讨论】:

    标签: postgresql schema metadata


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 2011-09-22
      相关资源
      最近更新 更多