Hello Postgres Gurus,

I am doing some research regarding the postgres native xml type, I found that 
the xml type can not be indexed, I found some work arounds for it but, I was 
wondering if there were any plans to implement indexing on a xpath expression 
in future releases on Postges like Postgres 9?

Thank you,
Sncerely,
Kasia

-----------------------------------------------------------------------------------------------------------------------------------------------------8.3
 has integrated xpath function. There is gap in XML support, because XML type 
isn't supported with GIST or GIN index. So xpath function returns array of xml 
values. But we can write custom casting to int array:

CREATE OR REPLACE FUNCTION xml_list_to_int(xml[])
RETURNS int[] AS $$
SELECT ARRAY(SELECT to_number(($1[i])::text,'999999.99')::int
                FROM generate_series(1, array_upper($1,1)) g(i))
$$ LANGUAGE SQL IMMUTABLE;

CREATE CAST (xml[] AS int[]) WITH FUNCTION xml_list_to_int(xml[]);

-- array of integers are supported with GIST
CREATE INDEX fx ON foo USING
GIN((xpath('//id/text()',order_in_xml)::int[]));
8.13.3. Accessing XML Values
The xml data type is unusual in that it does not provide any comparison 
operators. This is because there is no well-defined and universally useful 
comparison algorithm for XML data. One consequence of this is that you cannot 
retrieve rows by comparing an xml column against a search value. XML values 
should therefore typically be accompanied by a separate key field such as an 
ID. An alternative solution for comparing XML values is to convert them to 
character strings first, but note that character string comparison has little 
to do with a useful XML comparison method.
Since there are no comparison operators for the xml data type, it is not 
possible to create an index directly on a column of this type. If speedy 
searches in XML data are desired, possible workarounds include casting the 
expression to a character string type and indexing that, or indexing an XPath 
expression. Of course, the actual query would have to be adjusted to search by 
the indexed expression.
The text-search functionality in PostgreSQL can also be used to speed up 
full-document searches of XML data. The necessary preprocessing support is, 
however, not yet available in the PostgreSQL distribution.

Reply via email to