[Linuxtrent] Re: chiave primaria in postgres

  • From: Matteo Ianeselli <m.ianeselli@xxxxxxxxxxx>
  • To: Mailing list linuxtrent <linuxtrent@xxxxxxxxxxxxx>
  • Date: Tue, 07 Dec 2004 12:18:29 +0100

Il giorno mar, 07-12-2004 alle 08:44 +0100, tiziano @ work ha scritto:
> Mi sono spiegato probabilmente male.
> Non è che mi sono perso una chiave primaria, e non so come ricercarla 
> (qualunque client sql va bene per questo)... a me serve la sintassi sql  
> per recuperare da postgres informazioni sulla chiave primaria. 
> "describe" di mysql è un comando sql.


Lo puoi fare con una select di questo genere:

SELECT 
    pg_attribute.attname
FROM
    pg_constraint 
JOIN 
    pg_class ON pg_class.oid = pg_constraint.conrelid  
JOIN
    pg_namespace ON pg_namespace.oid = pg_class.relnamespace
JOIN 
    pg_attribute ON  pg_attribute.attrelid = pg_class.oid
                 AND pg_attribute.attnum = ANY (pg_constraint.conkey)
WHERE
    pg_constraint.contype = 'p'
AND pg_class.relname = '<tabella>'
AND pg_namespace.nspname = 'public'

che restituisce una riga per ogni colonna che fa parte dell'eventuale
chiave primaria sulla tabella "<tabella>" nel namespace "public".

L'unica fregatura è che non riesco ancora a recuperare le colonne
nell'ordine specificato nel DDL (ma fa poca differenza per una PRIMARY
KEY), visto che l'elenco delle colonne è memorizzato come un tipo array
di interi (da qui l'uso di ANY()) che al momento non saprei spacchettare
per farci sopra un'ORDER BY per posizione nell'array.

Trovi di tutto e di più nella documentazione di PostgreSQL, alla voce
"system catalogs". Si tratta solo di fare le query del caso.

-- 
  |   \    \  | ___|_  |_  |  ianezz a casa sua... :-)
  |  _ \  | \ | _|    /   /   Verba volant, scripta
 _|_/  _\_|  _|____|___|___|  manent, data corrupted

--
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: