Thread: Re: pg_get_INDEXdef - opclass

Re: pg_get_INDEXdef - opclass

From
"Dave Page"
Date:

> -----Original Message-----
> From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
> Sent: 12 June 2006 18:32
> To: Dave Page
> Cc: pgsql-hackers@postgresql.org
> Subject: Re: [HACKERS] pg_get_INDEXdef - opclass
>
> "Dave Page" <dpage@vale-housing.co.uk> writes:
> >> Following a pgAdmin bug report, I noticed that
> pg_get_viewdef doesn't
> >> return the opclass when called for a specific column (in 8.1
> >> at least) -
>
> > Bah, I mean pg_get_indexdef of course :-)
>
> This is intentional --- whoever asked for the per-column variant of
> the indexdef function wanted it that way.  It seems reasonable to me:
> you can extract the opclass name with a simple join against
> pg_index.indclass[N], when you need it, whereas if the function
> sometimes included an opclass name that would tend to break apps that
> weren't expecting it.  OTOH, getting the expression for an expression
> column would be seriously painful if there were no function to do it.

Right, but how can I conditionally join with pg_opclass based on whether
or not the opclass specified for the column is the default for that
type? For a base type index column I can probably do that with some SQL,
but what about cases where the index column is an expression?

Regards, Dave.


Re: pg_get_INDEXdef - opclass

From
Tom Lane
Date:
"Dave Page" <dpage@vale-housing.co.uk> writes:
> Right, but how can I conditionally join with pg_opclass based on whether
> or not the opclass specified for the column is the default for that
> type?

Check pg_opclass.opcdefault and compare pg_opclass.opcintype to the
index column's datatype (which you'd get from its pg_attribute row
... whether it's an expression is irrelevant).
        regards, tom lane