RE: Ayuda con problema de "Encoding" (supongo)

From: "Fabio Bon" <fabiobonpereira(at)gmail(dot)com>
To: PostgreSQL en Español (PostgreSQL en Español) <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Ayuda con problema de "Encoding" (supongo)
Date: 2015-07-15 16:37:49
Message-ID: 13b801d0bf1c$982e8740$c88b95c0$@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

He estado investigando un poco mas sobre mi problema y he observado que si
creo la DB como LATIN9 y collate = 'C' lc_ctype = 'C', al hacer el restore
no tengo problemas y los datos se ven correctamente. Me refiero a que se ven
los tildes, el error en el "select * from blite order by blide desc, bliide
desc;" tampoco ocurre.

Como la DB viene siendo migrada desde distintas versiones de PSQL, entiendo
que arrancó con versión 7, es probable que en algún momento se usó con
codificación LATIN9.

Ahora, si cambio la codificación de la base a UTF8, ya no veo los tildes y
vuelvo a los errores antes descriptos. Además da errores al efectuar un
restore de una tabla que contiene palabras con tilde en sus filas.

Supongo (la verdad que no lo tengo claro) que los datos se almacenan acorde
a la codificación de la base en el momento de los "insert", luego se puede
cambiar la codificación de la base (cosa que no cambia los datos) y obtengo
efectos como los que me ocurre a mi (no veo tildes).

Pregunto: ¿Hay una forma de cambiar la codificación de los datos de LATIN9 a
UTF8?

Cordiales saludos,
Fabio

-----Mensaje original-----
De: Fabio Bon [mailto:fabiobonpereira(at)gmail(dot)com]
Enviado el: miércoles, 15 de julio de 2015 10:58 a.m.
Para: 'Alvaro Herrera'
Asunto: RE: [pgsql-es-ayuda] Ayuda con problema de "Encoding" (supongo)

Alvaro,

>Hmm, supongo que el initdb en 9.4 usó la codificación UTF8. ¿Quizás
>tienes
client_encoding definido? Supuestamente cuando la BD está declarada como
SQL_ASCII no debería ocurrir ninguna conversión, pero desde que tenemos
codificaciónes por base >de datos (creo que de 9.3 en
>adelante) las cosas se han vuelto un poco menos simples en esta área.

Si uso "Client_Encoding", dicha propiedad está configurada como SQL_ASCII en
el postgresql.conf, aunque entiendo que al coincidir con el encoding de la
DB no debería causar efecto alguno, no?
De todas formas, comenté dicha propiedad (y reinicie el DBMS) y no hubo
cambios.

>Supongo que el error desaparece si especificas COLLATE C en el order
>by,
SELECT .. ORDER BY blide COLLATE "C" DESC, bliide COLLATE "C" DESC ? Si es
así, entonces por alguna razón el sistema está considerando que el collate
por omisión no es C sino >alguna otra cosa que probablemente involucra UTF8
(y por eso la conversión a esa codificación).

En observación mas detallada, veo que un simple select * from vjetip; da el
mismo error. VjeTip es una tabla de dos registros, donde supongo que es un
tilde lo que no le gusta.
Vuelvo a foja cero, ya que el create de la base lo hago idéntico a como lo
tiene el cliente.

>> c) Estoy cometiendo un error de procedimiento al restaurar la base
de
>> datos en el manejador 9.4.1 ?

>Creo que el error lo cometiste al tener datos en SQL_ASCII. Deberías
reconsiderar eso. Mentirle a la BD no suele ser buena idea.

Entiendo que la decisión de usar SQL_ASCII no fue la mejor, pero la heredé.
Yo hice el initdb de mi ambiente de pruebas de la misma forma que lo tiene
el cliente.

/usr/lib/postgresql/9.4/bin/initdb -D ./main -E SQL_ASCII (asi tal cual, aún
lo tengo en el "history" )

No tengo mayor problema en volver a levantar otro cluster UTF-8 si tuviera
una forma de "convertir" la codificación de las bases desde SQL_ASCII (mi
cliente) a UTF-8 (mi ambiente); aunque no sería lo mejor porque si los
ambientes son distintos podría haber diferencias en el momento de los
testings y no es lo que quiero. Podría migrar el ambiente de mi cliente, eso
si sería lo mejor, siempre y cuando pudiera hacer la conversión de
codificación.

Que forma me sugieres para cambiar la codificación de una base de datos ?

Cordiales saludos,

Fabio Bon
Av. Jorge Williams M.62 S.10
Tel. (+598) 26966918 096185889
e-Mail fbon(at)montevideo(dot)com(dot)uy

-----Mensaje original-----
De: Alvaro Herrera [mailto:alvherre(at)2ndquadrant(dot)com] Enviado el: miércoles,
15 de julio de 2015 07:16 a.m.
Para: Fabio Bon
CC: PostgreSQL en Español (PostgreSQL en Español)
Asunto: Re: [pgsql-es-ayuda] Ayuda con problema de "Encoding" (supongo)

Fabio Bon escribió:

> cosco=# select * from blite order by blide desc, bliide desc;
>
> ERROR: secuencia de bytes no válida para codificación «UTF8»: 0xec
> 0x61
> 0x20

Hmm, supongo que el initdb en 9.4 usó la codificación UTF8. ¿Quizás tienes
client_encoding definido? Supuestamente cuando la BD está declarada como
SQL_ASCII no debería ocurrir ninguna conversión, pero desde que tenemos
codificaciónes por base de datos (creo que de 9.3 en
adelante) las cosas se han vuelto un poco menos simples en esta área.

Supongo que el error desaparece si especificas COLLATE C en el order by,
SELECT .. ORDER BY blide COLLATE "C" DESC, bliide COLLATE "C" DESC ? Si es
así, entonces por alguna razón el sistema está considerando que el collate
por omisión no es C sino alguna otra cosa que probablemente involucra UTF8
(y por eso la conversión a esa codificación).

> Mis preguntas son:
>
> a) Cuál es la diferencia que produce el error si la definición de la
> codificación es la misma y en la base original no ocurre?

Ni idea.

> b) Puedo estar frente a un “bug” sea de la versión 9.1 o de la 9.4.1
?

No es probable.

> c) Estoy cometiendo un error de procedimiento al restaurar la base
de
> datos en el manejador 9.4.1 ?

Creo que el error lo cometiste al tener datos en SQL_ASCII. Deberías
reconsiderar eso. Mentirle a la BD no suele ser buena idea.

--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

---
El software de antivirus Avast ha analizado este correo electrónico en busca
de virus.
https://www.avast.com/antivirus

---
El software de antivirus Avast ha analizado este correo electrónico en busca de virus.
https://www.avast.com/antivirus

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Paola Alejandra de Montserrat Cordero Bon 2015-07-15 20:15:50 Re: Problemas para realizar update
Previous Message Alvaro Herrera 2015-07-15 10:16:23 Re: Ayuda con problema de "Encoding" (supongo)