如何从Postgresql目录表中检索Index-Fillfactor?

时间:2013-08-06 15:47:25

标签: postgresql

我试图从其目录表中加载Postgres属性。

我创建了一个Postgres表和几组索引(唯一索引,聚簇索引)。 使用下面的查询,我可以索引的名称,索引的类型以及它的注释。

SELECT c.relname  as indexname, i.indisunique as isUniqueIndex, i.indisclustered as isClustered, pg_catalog.obj_description(c.oid, 'pg_class') as COMMENT 
FROM pg_catalog.pg_class c 
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace  
JOIN pg_catalog.pg_index i ON i.indexrelid = c.oid 
JOIN pg_catalog.pg_class t ON i.indrelid   = t.oid 
WHERE c.relkind = 'i' and n.nspname = 'schema1' AND t.relname='table_with_index'

有没有办法检索索引的fillfactor值? 我正在使用Postgresql 8.4,我看到了使用填充因子创建索引的语法,所以希望有一种方法可以从目录表中获取值。

1 个答案:

答案 0 :(得分:1)

一个不错的方法是使用&#34; -E&#34;运行psql。选项以回显目录查询,然后从中提取所需内容。 例如。 psql -d your_db -E然后发出\d+ <your index name>

如果您正在寻找索引定义,另一个查询是使用pg_get_indexdef()函数。

例如

select pg_get_indexdef('aaa_idx'::regclass::oid);
                         pg_get_indexdef                          
------------------------------------------------------------------
 CREATE INDEX aaa_idx ON aaa USING btree (x) WITH (fillfactor=60)

我继续从9.2中提取目录查询,这可能会或可能不会在8.4中工作。自从我使用8.4目录以来已经有一段时间了,我不记得这里引用的表是否已经改变。

SELECT c.relchecks,
       c.relkind,
       c.relhasindex,
       c.relhasrules,
       c.relhastriggers,
       c.relhasoids,
       pg_catalog.array_to_string(c.reloptions || array(SELECT 'toast.' || x FROM pg_catalog.unnest(tc.reloptions) x), ', ') as storage_options,
       c.reltablespace,
       CASE
           WHEN c.reloftype = 0 THEN ''
           ELSE c.reloftype::pg_catalog.regtype::pg_catalog.text
       END,
       c.relpersistence
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_class tc ON (c.reltoastrelid = tc.oid)
LEFT JOIN pg_namespace nsp ON nsp.oid = c.relnamespace
WHERE nsp.nspname = 'schema1'
AND c.relname = 'YOUR INDEX'