Hola,  :)

Hmm, supongo que el problema es que el antispam de postgresql.org se
está comiendo tu mensaje :-(

Perdona que te vuelva a escribir al privado, quisiera ver si por fin se resuelve mi prolema con respecto a los mensajes que envío a la lista.

En un campo tipo text tengo guardados muchos pares parámetros-valor, todos en una misma cadena pero separados por '\n', por ejemplo:

'mostrar_titulo_pagina=1\ntitulo_pagina=Bienvenidos mi
sitio\nmostrar_descripcion=0\n\n'

Quisiera poder cambiar el valor de uno de esos parámetros sin alterar los demás.

Uf.  Como diseño, es bastante malo, precisamente porque es muy difícil
hacer modificaciones en los valores, hacer chequeos de integridad, o
hacer búsquedas en los valores.  Te recomendaría migrarlo, la solución
menos mala que se me ocurre es contrib/hstore que permite almacenar
columnas que son conjuntos de llave/valor como las tuyas, pero es más
funcional.

Alvaro, me explico más. EL software es un sitio Joomla(me pidieron diseñarlo con el), específicamente en su v.1.5.15, y por supuesto la bd es mysql pero este tipo de campo tiene su igual en postgresql, por eso escribí acá pues no estoy en listas de mysql. Así que ya entenderás porque no puedo cambiar el diseño. Yo he resuelto cambiando el parámetro en el script que crea la bd antes de instalar pero quiero aprender cosas de avanzadas como estas, en caliente, desde el cliente de mysql o postgresql.

Para modificar esto yo usaría string_to_array(tu-string, '\n'), luego
unnest, y eso lo mezclaria con WITH para luego hacer split_part y tener
los valores en forma de tabla, mas manipulable:

alvherre=# with a as (select unnest(string_to_array(E'mostrar_titulo_pagina=1\ntitulo_pagina=Bienvenidos mi sitio\nmostrar_descripcion=0\n\n', E'\n')) as val) select split_part(val, '=', 1), split_part(val, '=', 2) from a;
      split_part       |      split_part
-----------------------+----------------------
 mostrar_titulo_pagina | 1
 titulo_pagina         | Bienvenidos mi sitio
 mostrar_descripcion   | 0
                       |
                       |
(5 filas)


Luego eso lo puedes poner en un subselect y cambiar el valor que
quieres, para despues hacer una concatenacion para pegar los valores con
= y luego juntarlo todo con array_agg() y array_to_string() para pegarlo
todo de vuelta en una sola cadena.

Entonces, ¿esto me serviría?. Estoy ancioso por probar.


--
Saludos,

Luis Esteban

--

Este mensaje le ha llegado mediante el servicio de correo electronico que 
ofrece Infomed para respaldar el cumplimiento de las misiones del Sistema 
Nacional de Salud. La persona que envia este correo asume el compromiso de usar 
el servicio a tales fines y cumplir con las regulaciones establecidas

Infomed: http://www.sld.cu/
--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net

Responder a