Re: Determine if an index is a B-tree, GIST, or something else?

From: Paul Jungwirth <pj(at)illuminatedcomputing(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: Determine if an index is a B-tree, GIST, or something else?
Date: 2013-01-17 18:28:01
Message-ID: CA+6hpak=ekKWkU1NEs-a-YVTz+meLRNVDfgT1ww7ZGvMxEjgOA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

> pg_indexes (not pg_index) seems to have the data you're looking for,
unless I misunderstood the question.

That is a lovely table, but I want to get each attribute individually,
without having to parse the CREATE INDEX .... statement.

It looks like I was almost there with pg_opclass. This will tell me what
kind of index is required for each operator:

select opcnamespace, opcname, amname from pg_opclass o, pg_am a where
o.opcmethod = a.oid;

So in principle I can just join pg_index, pg_opclass, and pg_am to get my
answer. It's actually a little more complicated because pg_index.indclass
is not an oid, but an oidvector, with one entry for each column in the
index. But unless I'm mistaken, every column in given index must use the
same index method. For instance in a 2-column index you can't say `USING
(btree, gist)`. So I can join with `pg_index.indclass[0] = pg_opclass.oid`.
Can anyone confirm for me that for any index, every pg_opclass it uses will
have the same pg_am?

Thanks,
Paul

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2013-01-17 19:14:05 Re: Determine if an index is a B-tree, GIST, or something else?
Previous Message Devrim GÜNDÜZ 2013-01-17 18:24:25 Re: Determine if an index is a B-tree, GIST, or something else?