On 02-12-2011 15:46, JotaComm wrote:
> SELECT pg_class.relname AS "Nome da tabela",
> 
> pg_attribute.attname AS "Nome do atributo",
> 
> pg_constraint.conname AS "Nome da restrição - Chave estrangeira",
> 
> pg_indexes.indexname AS "Nome do índice",
> 
> pg_indexes.indexdef AS "Definição do índice"
> 
> FROM pg_class JOIN pg_namespace ON pg_class.relnamespace=pg_namespace.oid
> 
> JOIN pg_attribute ON pg_class.oid=pg_attribute.attrelid
> 
> JOIN pg_constraint ON pg_attribute.attnum=ANY(pg_constraint.confkey) AND
> pg_class.oid=pg_constraint.conrelid
> 
> LEFT OUTER JOIN pg_indexes ON pg_class.relname=pg_indexes.tablename
> 
> WHERE pg_namespace.nspname='public';
>  
> 
Essa consulta traz a coluna da chave estrangeira incorreta. confkey é relativo
as colunas da tabela referenciada pela chave estrangeira. O correto seria algo
com:

attnum = ANY(conkey) AND contype = 'f'

Além disso, o último LEFT JOIN falha ao obter o nome do índice da coluna em
questão; ele está pegando qualquer índice da tabela. O correto seria fazer uma
correspondência com attnum (pg_attribute) e indkey (pg_index).


-- 
   Euler Taveira de Oliveira - Timbira       http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a