Guillermo,

intenta seguir los siguientes pasos
http://www.postgresql.org/message-id/6.1.2.0.2.20041108105839.02fdc...@pop.suscom-maine.net(Ingles)




El 19 de abril de 2013 17:50, Guillermo E. Villanueva <
guillermo...@gmail.com> escribió:

> Muchas gracias Alvaro, que despiole!!!!
> voy a tener que hacer algo así.
> Saludos
>
> Guillermo Villanueva
>
>
>
> El 19 de abril de 2013 16:16, Alvaro Herrera 
> <alvhe...@2ndquadrant.com>escribió:
>
> Guillermo E. Villanueva escribió:
>> > Amigos, heredé una base de datos que está codificada en LATIN1
>> > Intenté hacer backup de algunas tablas para llevarlas de un server a
>> otro.
>> > En ambos casos está en LATIN1
>> > Al backup lo hice generando INSERTs
>> > El mismo backup ya me genera el archivo con seteos preliminares como :
>> > SET client_encoding = 'LATIN1';
>> > Y la sorpresa viene cuando ejecuto los inserts (lo hago desde pgAdmin)
>> > guarda mal los caracteres especiales como ñ á é etc
>> > en cambio si modifico el seteo pasándolo a :
>> > SET client_encoding = 'UTF8';
>> > Todo se guarda ok
>> >
>> > Porqueeee si la base está en LATIN1 y el cliente estaba en LATIN1, no se
>> > suponía que debía guardar bien así?
>> > Desde ya les agradezco si me pueden aclarar un poquito el panorama
>>
>> Seguramente lo que sucede es que los datos realmente no están en Latin1
>> porque las aplicaciones han estado hablando en UTF8 todo el tiempo.  Si
>> hubieras declarado client_encoding=utf8 el sistema habría hecho
>> conversión de los bytes que llegaban de la aplicación y los habría
>> ingresado en Latin1.  Pero no lo hiciste; y Latin1 no tiene mecanismo de
>> auto-verificación, de manera que los bytes que recibe son los que
>> inserta, sin posibilidad de verificar que "tienen sentido".
>>
>> UTF8 es distinto no sólo porque los caracteres se representan diferente,
>> sino también tiene más redundancia en la representación de los
>> caracteres, de manera que si tratas de insertar datos que en realidad
>> están en Latin1 (por ejemplo), puede darse cuenta que a la secuencia le
>> faltan bytes y rechaza la cadena como no válida.
>>
>>
>> Tu solución es tratar de importar los datos en UTF8 y verificar que todo
>> está correcto.  Si hay algo que falla la inserción, considera esos datos
>> restantes como si estuvieran en Latin1 (client_encoding=latin1).  Luego
>> de eso deberías tener todos los datos con la codificación correcta.
>> A mí me tocó enfrentar este mismo problema, donde había una mezcla de
>> UTF8 válido (99% de los datos) y Latin1.  Lo que hice fue pasar todo por
>> pgloader en dos pasadas; la primera asumía encoding utf8.  El 1% fue
>> rechazado y agregado a un archivo de fallas; la segunda pasada importaba
>> el archivo de fallas considerando latin1.
>>
>> --
>> Álvaro Herrera                http://www.2ndQuadrant.com/
>> PostgreSQL Development, 24x7 Support, Training & Services
>>
>
>


-- 

--
Correo no firmado o cifrado

Responder a