0

我正在尝试从其目录表中加载 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,我看到了使用填充因子创建索引的语法,所以希望有一种方法可以从目录表中获取值。

4

1 回答 1

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'
于 2013-08-06T16:08:39.203 回答