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
Views: Raw Message | Whole Thread | Download mbox | Resend email
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

Browse pgsql-es-ayuda by date

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