加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

列出PostgreSQL数据库的所有索引名称,列名称及其表名

发布时间:2020-12-13 16:48:17 所属栏目:百科 来源:网络整理
导读:什么是查询以获取列表的所有索引名称,其列名称和其表名称的postgresql数据库? 我试图通过使用这个查询,但如何获取索引列表,其列名称及其表名称在数据库中的所有索引的列表? SELECT * FROM pg_class,pg_index WHERE pg_class.oid = pg_index.indexrelid
什么是查询以获取列表的所有索引名称,其列名称和其表名称的postgresql数据库?

我试图通过使用这个查询,但如何获取索引列表,其列名称及其表名称在数据库中的所有索引的列表?

SELECT *
 FROM pg_class,pg_index
 WHERE pg_class.oid = pg_index.indexrelid
 AND pg_class.oid IN (
     SELECT indexrelid
     FROM pg_index,pg_class
     WHERE pg_class.oid=pg_index.indrelid
     AND indisunique != 't'
     AND indisprimary != 't'
     AND relname !~ '^pg_');`
这将输出所有包含详细信息的索引(从我的视图定义中提取):
SELECT i.relname as indname,i.relowner as indowner,idx.indrelid::regclass,am.amname as indam,idx.indkey,ARRAY(
       SELECT pg_get_indexdef(idx.indexrelid,k + 1,true)
       FROM generate_subscripts(idx.indkey,1) as k
       ORDER BY k
       ) as indkey_names,idx.indexprs IS NOT NULL as indexprs,idx.indpred IS NOT NULL as indpred
FROM   pg_index as idx
JOIN   pg_class as i
ON     i.oid = idx.indexrelid
JOIN   pg_am as am
ON     i.relam = am.oid;

可以向结尾添加一个额外的连接,以修剪命名空间:

SELECT i.relname as indname,idx.indpred IS NOT NULL as indpred
FROM   pg_index as idx
JOIN   pg_class as i
ON     i.oid = idx.indexrelid
JOIN   pg_am as am
ON     i.relam = am.oid
JOIN   pg_namespace as ns
ON     ns.oid = i.relnamespace
AND    ns.nspname = ANY(current_schemas(false));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读