Fórum [DÚVIDA] SELECT CHAVE ESTRANGEIRA #26984

25/11/2008

0

Bom pessoal!
Sou iniciante no postgres, e estou com um pequeno grande problema:

Tenho 2 tabelas.

Como fazer um select para buscar o nome da chave estrangeira, o nome da tabela, o nome da coluna, o nome da tabela referenciada, e o nome da coluna referenciada?

No MySql, Sql tem todas essas colunas estão em uma view apenas, mas no postgre está em views ou catálogos diferentes... não estou conseguindo relacionar um com o outro...

Se alguém puder me dar uma mãozinha, eu agradeço!

Valeus


Maskara_121

Maskara_121

Responder

Posts

28/11/2008

Jair Bg

Bom Dia, coisa simples é (+-) assim pelo que pude entender:

SELECT DISTINCT
ON (pg_constraint.conname
, pg_type1.typname
, pg_attribute1.attname)
pg_constraint.conname AS nome_chave
, pg_type1.typname AS tabela_p
, pg_attribute1.attname AS campo_p
, pg_type2.typname AS tabela_fk
, pg_attribute2.attname AS campo_fk
, pg_get_constraintdef(pg_constraint.oid, TRUE) AS chave_estrangeira
FROM pg_constraint
INNER JOIN pg_type pg_type1
ON (pg_type1.typrelid = pg_constraint.conrelid)
INNER JOIN pg_type pg_type2
ON (pg_type2.typrelid = pg_constraint.confrelid)
INNER JOIN pg_attribute pg_attribute1
ON (pg_attribute1.attrelid = pg_constraint.conrelid)
AND (pg_attribute1.attnum = ANY (pg_constraint.conkey))
INNER JOIN pg_attribute pg_attribute2
ON (pg_attribute2.attrelid = pg_constraint.confrelid)
AND (pg_attribute2.attnum = ANY (pg_constraint.confkey))
WHERE (pg_constraint.contype = ´f´)

Ninguem trabalha porquê gosta, trabalho é o meio que utilizamos para realizar algo, originado de ideias ou desafios.


Responder

Gostei + 0

02/12/2008

Jair Bg

desculpe, cometi um erro, o código de consulta correto para buscar os campos da foreing key é:
SELECT pg_constraint.conname AS nome_chave
, pg_type1.typname AS tabela_p
, pg_attribute1.attname AS campo_p
, pg_description1.description AS desc_p
, pg_type2.typname AS tabela_fk
, pg_attribute2.attname AS campo_fk
, pg_description2.description AS desc_fk
, pg_get_constraintdef(pg_constraint.oid, TRUE) AS chave_estrangeira
FROM pg_constraint
INNER JOIN pg_type pg_type1
ON (pg_type1.typrelid = pg_constraint.conrelid)
INNER JOIN pg_type pg_type2
ON (pg_type2.typrelid = pg_constraint.confrelid)
INNER JOIN pg_attribute pg_attribute1
ON (pg_attribute1.attrelid = pg_constraint.conrelid)
AND (pg_attribute1.attnum = ANY (pg_constraint.conkey))
INNER JOIN pg_description pg_description1
ON (pg_description1.objoid = pg_attribute1.attrelid)
AND (pg_description1.objsubid = pg_attribute1.attnum)
INNER JOIN pg_attribute pg_attribute2
ON (pg_attribute2.attrelid = pg_constraint.confrelid)
AND (pg_attribute2.attnum = pg_constraint.confkey[
INDEX(CAST(ARRAY_TO_STRING(pg_constraint.conkey, ´.´) AS ltree),
CAST(CAST(pg_attribute1.attnum AS VARCHAR) AS ltree)) + 1])
INNER JOIN pg_description pg_description2
ON (pg_description2.objoid = pg_attribute2.attrelid)
AND (pg_description2.objsubid = pg_attribute2.attnum)
WHERE (pg_constraint.contype = ´f´)
AND (pg_constraint.conname LIKE ´fk_¬´)
ORDER BY pg_constraint.conname
, pg_type1.typname
, pg_attribute1.attname

.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar