No processo de encontrar índices duplicados, tenho usado a seguinte consulta para identificá-los:
SELECT
indrelid::regclass AS TableName
,array_agg(indexrelid::regclass) AS Indexes
FROM pg_index
GROUP BY
indrelid
,indkey
HAVING COUNT(*) > 1;
De onde obtenho uma entrada com os seguintes dados:
tablename indexes
distribucion.asignacion {distribucion.distribucion_unique_asignacion_imei,distribucion.pk_distribucion_asignacion}
Também verifique se o índice está realmente duplicado, vejo manualmente as colunas envolvendo cada índice relatado, com esta consulta:
select * from pg_indexes where tablename='<table_name>';
Mas quando procuro os índices acima para a tabela ''distribucion.asignacion'', não obtenho resultados.
O que pode estar errado? Esses índices foram deixados "órfãos", em caso afirmativo, pode haver outras estruturas órfãs também em meu banco de dados, então como posso encontrá-las?
pg_indexes.tablename
contém apenas o nome da tabela, não o nome do esquema. O nome do esquema está disponível na colunaschemaname
.Então você precisa usar