有很多信息,可以从postgresql的information_schema和pg_catalog中检索到。我想检索有关由某个索引索引的列的信息,类似于在sqlite3中使用pragma index_info(<index_name>)可以实现的信息。如何在不解析create index语句的情况下实现此目标?

最佳答案

这些东西很容易发现。

只需使用-E选项运行psql,它将向您显示所使用的SQL语句。因此,在运行\d index_name时,以下语句(以及其他语句)用于检索索引列:

选择一个.attname,
pg_catalog.format_type(a.atttypid,a.atttypmod),
(SELECT SUBSTRING(pg_catalog.pg_get_expr(d.adbin,d.adrelid)FOR 128)
从pg_catalog.pg_attrdef d
哪里d.adrelid = a.attrelid
AND d.adnum = a.attnum
和a.atthasdef).attnotnull,
a.attnum,
pg_catalog.pg_get_indexdef(a.attrelid,a.attnum,TRUE)AS索引定义
从pg_catalog.pg_attribute一个
WHERE a.attrelid =(从pg_class的SELECT oid WHERE relname ='index_name')
AND a.attnum> 0
而不是一个
OR.BY.attnum;

09-27 20:29