Skip site navigation (1) Skip section navigation (2)

Re: campo tipo text...

From: "Luis Esteban" <esteban(at)princesa(dot)pri(dot)sld(dot)cu>
To: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: campo tipo text...
Date: 2009-12-28 19:58:22
Message-ID: op.u5ny3koxie74ma@jerusalen (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
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/

In response to

Responses

pgsql-es-ayuda by date

Next:From: Fernando HeviaDate: 2009-12-28 21:02:49
Subject: RE: Liberado PostgreSQL 8.5alpha3
Previous:From: Pablo BraulioDate: 2009-12-28 19:08:50
Subject: Re: Jairo Sanchez wants to connect on LinkedIn

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group