我想知道在PostgreSQL和Oracle中禁用/启用的索引列表。有人可以向我建议查询吗?
我有这样的查询SQL Server
SELECT *
FROM sys.indexes I
INNER JOIN sys.tables T ON I.object_id = T.object_id
WHERE I.type_desc = 'NONCLUSTERED'
AND I.name IS NOT NULL
AND I.is_disabled = 1`
我正在寻找类似的PostgreSQL和Oracle查询。
使用UserIndexes表
select INDEX_NAME, TABLE_OWNER,
TABLE_NAME, UNIQUENESS from
USER_INDEXES u inner join
all_tables a
On u.table_name=a.table_name
and u.table_owner=a.owner
对于所有索引,将表名替换为all_indexes并加入dba_tables
您可以将其用于postgres:
SELECT
trel.relname AS table_name,
irel.relname AS index_name,
string_agg(a.attname, ', ' ORDER BY c.ordinality) AS columns
FROM pg_index AS i
JOIN pg_class AS trel ON trel.oid = i.indrelid
JOIN pg_class AS irel ON irel.oid = i.indexrelid
JOIN pg_attribute AS a ON trel.oid = a.attrelid
JOIN LATERAL unnest(i.indkey)
WITH ORDINALITY AS c(colnum, ordinality)
ON a.attnum = c.colnum
WHERE i.indisvalid -- WHERE not i.indisvalid
GROUP BY i, trel.relname, irel.relname;
注意,在postgres中禁用索引意味着不断更新,而无需使用它进行查询。