On Thu, 03 Aug 2006 01:01:19 +0200, Kasper Johansen wrote:
> Med hvilken SQL-forespørgsel lister jeg alle indexes for en specifik
> tabel? Med tilhørende columns osv.
Hvis vi taler den interaktive prompt, så:
\d <tabelnavn>
Ellers:
- I visse programmeringsmiljøer (de fleste?) kan man få
metadata fra tabeller, evt. ved først at skabe et tomt
resultatsæt:
SELECT * FROM tabelnavn WHERE 0=1
Måske dit programmeringsmiljø inkluderer informationer
om tabel-indexes?
- Ellers, noget i stil med nedenstående, hvor vi antager, at
din tabel hedder "bar" og dit schema hedder "public":
SELECT
pc2.relname AS idxname,
pa.attname AS colname
FROM pg_catalog.pg_class AS pc1
JOIN pg_catalog.pg_index AS pi ON pc1.oid = pi.indrelid
JOIN pg_catalog.pg_class AS pc2 ON pi.indexrelid = pc2.oid
JOIN pg_catalog.pg_attribute AS pa ON
(
pa.attrelid = pc1.oid AND
pa.attnum > 0 AND
pa.attisdropped = False AND
pa.attnum = ANY(pi.indkey)
)
JOIN pg_catalog.pg_namespace AS pn ON pc1.relnamespace=pn.oid
WHERE
pc1.relkind = 'r' AND
pn.nspname = 'public' AND
pc1.relname = 'bar';
Se
http://www.postgresql.org/docs/8.1/static/catalogs.html for
en guide til PostgreSQL's systemkataloger.
--
Greetings from Troels Arvin