如何测量 Postgres 索引占用的磁盘 space?

How do I measure disk space occupied by a Postgres index?

我在 Mac Sierra 上使用 Postgres 9.5.1。我在 table

上创建了以下索引
CREATE INDEX my_object_times_name_gin_trgm_idx 
ON my_object_times USING gin (name gin_trgm_ops);

我如何衡量这个索引占用了多少磁盘空间space?我想将此与创建另一种类型的索引时将被起诉的 space 进行比较。注意,我不关心table中数据的大小,只关心索引占用的存储量。

您会在这里找到一些有趣的脚本:Disk Usage

SELECT d.datname AS Name,  pg_catalog.pg_get_userbyid(d.datdba) AS Owner,
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))
        ELSE 'No Access'
    END AS SIZE
FROM pg_catalog.pg_database d
    ORDER BY
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_database_size(d.datname)
        ELSE NULL
    END DESC -- nulls first
    LIMIT 20

您可以使用 pg_relation_size(),例如:

select pg_relation_size('my_object_times_name_gin_trgm_idx');

大小以字节为单位。如果你想以 "human readable" 的方式格式化,你可以使用 pg_size_pretty()

select pg_size_pretty(pg_relation_size('my_object_times_name_gin_trgm_idx'));