获取postgresql数据库的所有索引名、列名和表名列表的查询是什么?

我已经try 使用这个查询来获取数据库中所有索引的列表,但是如何获取索引列表、其列名和表名呢?

 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,
       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
JOIN   pg_namespace as ns
ON     ns.oid = i.relnamespace
AND    ns.nspname = ANY(current_schemas(false));

Postgresql相关问答推荐

Qt,PostgreSQL -从NUERIC列检索max int64_t/uint64_t值

PostgreSQL中btree_gist索引涉及integer和tstzrange属性查询计划的问题

Postgres数据库系统已准备好接受连接和docker compose

需要用 jack/pgx 更新 golang 中复合类型的 PSQL 行

AGE Graph 实际上存储为 postgreSQL 表,对吧?如何检索该表(不是图表)?

无法使用golang在postgresql中使用自定义类型插入/更新数据

如何在 PostgreSQL 的回归测试中测试 TYPE 发送和接收函数

使用间隔参数的 go postgres 准备好的语句不起作用

是否可以在 postgresql 中添加表元数据?

函数将多列作为单列而不是多列返回

在 Postgres 中查询 JSON 对象数组

PostgreSQL 中基于时间戳的移动平均线

postgres 和 python

SQLAlchemy、Psycopg2 和 Postgresql 复制

如何在容器内创建 postgres 扩展?

如何 Select 列值为空的行?

将数据推送到 Heroku 时出错:time zone displacement out of range

PostgreSQL/JDBC 和 TIMESTAMP 与 TIMESTAMPTZ

PostgreSQL:如果不存在则创建表 AS

Android 的 JDBC 与 Web 服务