我试图从其目录表中加载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,我看到了使用填充因子创建索引的语法,所以希望有一种方法可以从目录表中获取值。
答案 0 :(得分:1)
一个不错的方法是使用" -E"运行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'