a question on postgres/xml

Lists: pgsql-bugs
From: Cindy <tittle(at)gmail(dot)com>
To: pgsql-bugs(at)postgresql(dot)org
Subject: a question on postgres/xml
Date: 2008-09-09 17:29:00
Message-ID: 3358645f0809091029t7b8cf352wf52a34048503b9b@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs

I looked through the lists and couldn't figure out where else to put
this. I'm trying to create indices on xpath expressions for columns
of type xml.
I'm running postgres version 8.3.3, running on solaris.

Text=# create index trclass on lsj_xml ((xpath
('//span[(at)class="tr"]/text()', entry)::text));
ERROR: functions in index expression must be marked IMMUTABLE

If I can't cast it as a text, then what? xml has no comparator
functions, and I need indices because the xpath lookups are very slow.
I've tried a number of variations including

Text=# create index trclass on lsj_xml (xmlserialize(content xpath
('//span[(at)class="tr"]/text()', entry) as text));
ERROR: argument of XMLSERIALIZE must be type xml, not type xml[]

which i understand, because the xpath is returning an array of xml
bits. But I'm a bit stumped here, so any help, tips, or suggestions
would be appreciated. I've been scouring the internet for any info on
postgres/xml, but there's very little out there since this is so
new...

If you need the table info:

Text=# \d lsj_xml
Table "public.lsj_xml"
Column | Type | Modifiers
------------+---------+-----------
id | integer | not null
headword | text | not null
caseunax | text | not null
uncaseax | text | not null
uncaseunax | text | not null
entry | xml | not null
Indexes:
"lsjxml_headword_idx" btree (headword)
"lsjxml_id_idx" btree (id)
"lsjxml_uncaseunax_idx" btree (uncaseunax)

Thanks for any help!
Cindy
ctmoore(at)uci(dot)edu