Discussion:
How to use int2vector
(too old to reply)
Rich Cullingford
2004-01-29 16:20:57 UTC
Permalink
Hello, all.

In trying to write a utility to drop/restore table indexes (as an aid to
a fast reload of the associated tables), I ran into the definition of
the field pg_index.indkey as an int2vector. I can't see any place in the
doc that says what to do with this type, you can't cast it to any array
type, and the only reference to it in the searchable archives (Thanks,
pgsql.ru!) points one to contrib/intarray -- which doesn't mention
int2vector at all.

How can I deal with this type in plpgsql?

Thanks,
Rich Cullingford
System Detection, Inc.
***@sysd.com


---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings
Tom Lane
2004-01-29 17:11:51 UTC
Permalink
Post by Rich Cullingford
In trying to write a utility to drop/restore table indexes (as an aid to
a fast reload of the associated tables), I ran into the definition of
the field pg_index.indkey as an int2vector.
How can I deal with this type in plpgsql?
You should be able to index into it (indkey[0], etc), but I cannot think
of any good reason to be looking at the details of the pg_index row for
your purposes. It is certainly not reasonable to think of writing
plpgsql code to reconstruct 7.4 expressional index definitions from
what's in pg_index :-(. I would suggest using the pg_get_indexdef
function instead. Perhaps something like

regression=# select pg_get_indexdef(indexrelid) from pg_index where indrelid = 'tenk1'::regclass;
pg_get_indexdef
-----------------------------------------------------------
CREATE INDEX tenk1_hundred ON tenk1 USING btree (hundred)
CREATE INDEX tenk1_unique2 ON tenk1 USING btree (unique2)
CREATE INDEX tenk1_unique1 ON tenk1 USING btree (unique1)
(3 rows)

regression=#

pg_get_indexdef() exists at least as far back as 7.0, and probably
further (pg_dump has relied on it for a long time).

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to ***@postgresql.org)
Loading...