xpath sobre postgres

From: Regina Gonzalez <rgonzale(at)safp(dot)cl>
To: Ayuda Postgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: xpath sobre postgres
Date: 2007-12-03 22:39:03
Message-ID: 47548587.4040403@safp.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Estoy desarrollando un proyecto, donde la información viene en XML la
que se almacena en una Base de Datos Postgres en el campo sge_xml (El
volumen de información es considerable, para cada tupla de la Base de
Datos). Varias etiquetas traen mucha informaciónn, como por ejemplo la
etiqueta correspondiente a cotizaciones, donde los periodos pueden ser
los correspondientes a 25 años y los tipos de fondos son variables para
cada periodo. La parte del XML que corresponde a lo descrito es por
ejemplo el siguiente:

<cotizaciones>
<periodo aaaamm="2001-01">
<tipofondo codigo="B">
<cuotas>20</cuotas>
</tipofondo>
<tipofondo codigo="A">
<cuotas>10</cuotas>
</tipofondo>
</periodo>
<periodo aaaamm="2001-02">
<tipofondo codigo="C">
<cuotas>20</cuotas>
</tipofondo>
</periodo>
</cotizaciones>

Para extraer la información desde la Base de Datos utilizo tres
consultas SQL con xpath_list. En la primera se consulta por el atributo
aaaamm, en la segunda para cada aaaamm obtenido en la consulta anterior
se extraen los códigos de Fondo y la tercera, para cada par aaaamm y
codigo obtengo el monto de las cuotas.
Lo anterior es porque las etiquetas no son fijas, pero consume demasiado
tiempo y necesito urgente bajar estos tiempos, dado que esto es una
mínima parte de todo lo que tiene que realizar el sistema
Ahora si trato de obtener toda la información a través de una sola
consulta, como la siguiente:

select xpath_list( sge_xml, '//cotizaciones/periodo/@aaaamm') as aaaamm,
xpath_list( sge_xml,
'//cotizaciones/periodo/tipofondo/@codigo') as codigo,
xpath_list( sge_xml, '//cotizaciones/periodo/tipofondo/cuotas
from
....
me entrega:

aaaamm | codigo | cuotas
2001-01,2001-02 | B,A,C | 10,20,30

pero cuál corresponde a cuál?, no es posible determinarlo, ya que no me
entrega tuplas, sino que me genera una lista de valores delimitados por
un separador.

Existe una manera más eficiente de realizar esta consulta utilizando la
librería XML para postgres, pero obteniendo toda la información para
cada periodo realizando una sola consulta, o existe alguna otra contrib
que tenga otras funciones.

Atentamente,
Regina González
Superintendencia de AFP

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2007-12-04 02:17:13 Re: Ayuda para unir valores de dos campos.
Previous Message Alvaro Herrera 2007-12-03 22:14:06 Re: concatenar boolean con text, no puedo